यह एक क्वेरी पैटर्न है जिसका उत्तर मुझे कई साल पहले मिला था:
SELECT *
FROM mytable a
JOIN mytable b on a.starttime <= b.endtime
and a.endtime >= b.starttime
and a.name != b.name; -- ideally, this would compare a "key" column, eg id
"कोई भी ओवरलैप" ढूंढने के लिए, आप विपरीत . की तुलना करें एक दूसरे के साथ समय सीमा के अंत। यह ऐसा कुछ है जिसके लिए मुझे एक पेन और पेपर निकालना पड़ा और यह महसूस करने के लिए आसन्न श्रेणियों को खींचना पड़ा कि किनारे के मामले इस तुलना में उबाल गए।
यदि आप किसी भी पंक्ति को ओवरलैप होने से रोकना चाहते हैं, तो इस क्वेरी के एक प्रकार को ट्रिगर में रखें:
create trigger mytable_no_overlap
before insert on mytable
for each row
begin
if exists (select * from mytable
where starttime <= new.endtime
and endtime >= new.starttime) then
signal sqlstate '45000' SET MESSAGE_TEXT = 'Overlaps with existing data';
end if;
end;