सबसे पहले, Group
का उपयोग न करें कॉलम नाम के रूप में। यह प्रत्येक SQL मानक में एक आरक्षित शब्द है। मैंने इसका नाम बदलकर grp
कर दिया है मेरे उत्तर के उद्देश्य से।
'2012-06-01 08:00'
. से एक नई शिफ़्ट शेड्यूल करने का प्रयास किया जा रहा है करने के लिए '2012-06-03 08:00'
...
INSERT INTO tbl (prim, grp, startdate, enddate)
SELECT 1, 10, '2012-06-01 08:00', '2012-06-03 08:00'
WHERE NOT EXISTS (
SELECT *
FROM tbl
WHERE prim = 1
AND grp = 10
AND '2012-06-03 08:00' > startdate -- not >= to allow sharing a border
AND '2012-06-01 08:00' < enddate -- and not BETWEEN ... AND either
)
ध्यान दें कि मैं तुलना करता हूं:
new_end > old_start new_start < old_end
यदि आप BETWEEN .. AND ..
. का उपयोग करते हैं आप अपने परीक्षण में एक पाली की सीमाओं को शामिल करते हैं। यह >=
. का उपयोग करने जैसा ही है और <=
. आपको >
. का उपयोग करने की आवश्यकता है और <
सीमाओं को ओवरलैप करने की अनुमति देने के लिए।
खैर, और मेरे बड़े पैमाने पर सरलीकृत वाक्यविन्यास को आजमाएं। मूल रूप से आपके पास क्या था इसके बारे में निश्चित नहीं है।
यहाँ एक sqlfiddle पर कार्यशील डेमो है। कॉम
साथ खेलने के लिए।