इस तरह की क्वेरी को काम करना चाहिए - स्पष्ट JOIN
. के साथ फिर से लिखने के बाद वाक्य रचना:
SELECT something
FROM master parent
JOIN master child ON child.parent_id = parent.id
LEFT JOIN second parentdata ON parentdata.id = parent.secondary_id
LEFT JOIN second childdata ON childdata.id = child.secondary_id
WHERE parent.parent_id = 'rootID'
यहां ट्रिपिंग वायर यह है कि एक स्पष्ट JOIN
"पुरानी शैली" से पहले बांधता है CROSS JOIN
अल्पविराम के साथ (,
) मैं यहां मैनुअल को उद्धृत करता हूं:
पहले को फिर से लिखने के बाद, सभी जॉइन को बाएं से दाएं लागू किया जाता है (तार्किक रूप से - पोस्टग्रेज क्वेरी प्लान में तालिकाओं को पुनर्व्यवस्थित करने के लिए स्वतंत्र है) और यह काम करता है।
बस अपनी बात कहने के लिए, यह भी काम करेगा:
SELECT something
FROM master parent
LEFT JOIN second parentdata ON parentdata.id = parent.secondary_id
, master child
LEFT JOIN second childdata ON childdata.id = child.secondary_id
WHERE child.parent_id = parent.id
AND parent.parent_id = 'rootID'
लेकिन स्पष्ट JOIN
सिंटैक्स आम तौर पर बेहतर होता है, जैसा कि आपका मामला एक बार फिर दिखाता है।
और ध्यान रखें कि एकाधिक (LEFT
) JOIN
पंक्तियों को गुणा कर सकते हैं: