SELECT m1.meetingID, m1.meetingStart, m1.meetingEnd, m2.meetingID
FROM t_meeting m1, t_meeting m2
WHERE (m2.meetingStart BETWEEN m1.meetingStart AND m1.meetingEnd
OR m2.meetingEnd BETWEEN m1.meetingStart AND m1.meetingEnd)
AND m1.meetingID <> m2.meetingID
यह प्रत्येक जोड़ी को दो बार चुनेगा।
यदि आप चाहते हैं कि प्रत्येक जोड़ी को केवल एक बार चुना जाए, तो इसका उपयोग करें:
SELECT m1.meetingID, m1.meetingStart, m1.meetingEnd, m2.meetingID
FROM t_meeting m1, t_meeting m2
WHERE (m2.meetingStart BETWEEN m1.meetingStart AND m1.meetingEnd
OR m2.meetingEnd BETWEEN m1.meetingStart AND m1.meetingEnd)
AND m2.meetingID > m1.meetingID
सुनिश्चित करें कि आपके पास meetingStart
. पर अनुक्रमणिकाएं हैं और meetingEnd
क्वेरी के प्रभावी ढंग से काम करने के लिए।
MySQL
, हालांकि, संभवत:INDEX MERGE
. का उपयोग करेगा इस क्वेरी को चलाने के लिए, जो वर्तमान कार्यान्वयन में बहुत कुशल नहीं है।
आप इसका उपयोग करने का भी प्रयास कर सकते हैं:
SELECT m1.*, m2.*
FROM (
SELECT m1.meetingID AS mid1, m2.meetingID AS mid2
FROM t_meeting m1, t_meeting m2
WHERE m2.meetingStart BETWEEN m1.meetingStart AND m1.meetingEnd
AND m2.meetingID <> m1.meetingID
UNION
SELECT m1.meetingID, m2.meetingID
FROM t_meeting m1, t_meeting m2
WHERE m2.meetingEnd BETWEEN m1.meetingStart AND m1.meetingEnd
AND m2.meetingID <> m1.meetingID
) mo, t_meeting m1, t_meeting m2
WHERE m1.meetingID = mid1
AND m2.meetingID = mid2
, जो अधिक जटिल है लेकिन संभवत:थोड़ा तेज चलेगा।