ANSI-89 स्टाइल और ANSI-92 स्टाइल जॉइन को मिक्स न करें। उनकी अलग प्राथमिकता है जो भ्रमित करने वाली त्रुटियों को जन्म दे सकती है, और यहाँ वही हुआ है। आपकी क्वेरी की व्याख्या इस प्रकार की जा रही है:
FROM property p, (
propertygeometry pg
JOIN shortlist sl ON sl.PropertyID = p.id AND sl.MemberID = 384216
...
)
उपरोक्त में, कॉमा-स्टाइल जॉइन पर विचार करने से पहले जॉइन कीवर्ड का उपयोग करने वाले जॉइन का मूल्यांकन पहले किया जाता है। उस समय तालिका p
अभी तक घोषित नहीं किया गया है।
हालाँकि, अल्पविराम ऑपरेटर की प्राथमिकता INNER JOIN, CROSS JOIN, LEFT JOIN, इत्यादि से कम है। यदि आप शामिल होने की स्थिति होने पर कॉमा जॉइन को अन्य जॉइन प्रकारों के साथ मिलाते हैं, तो 'ऑन क्लॉज' में अज्ञात कॉलम 'col_name' फ़ॉर्म की त्रुटि तब हो सकती है। इस समस्या से निपटने के बारे में जानकारी इस खंड में बाद में दी गई है।
मेरा सुझाव है हमेशा ANSI-92 स्टाइल जॉइन का उपयोग करना, यानी JOIN कीवर्ड का उपयोग करना:
SELECT p.*,
IF(COUNT(ms.PropertyID) > 0,1,0) AS Contacted,
pm.MediaID,
date_format(p.AvailableFrom, '%d %b %Y') AS 'AvailableFrom',
astext(pg.Geometry) AS Geometry
FROM property p
JOIN propertygeometry pg ON p.PropertyGeometryID = pg.id
JOIN shortlist sl ON sl.PropertyID = p.id AND sl.MemberID = 384216
LEFT JOIN message ms ON ms.PropertyID = p.id AND ms.SenderID = 384216
LEFT JOIN property_media pm ON pm.PropertyID = p.id AND pm.IsPrimary = 1
WHERE p.paused = 0
GROUP BY p.id
संबंधित: