SQL-89 "अल्पविराम-शैली" को मिक्स न करें SQL-92 के साथ सिंटैक्स में शामिल हों JOIN
वाक्य - विन्यास। इन दो प्रकार के जॉइन ऑपरेशंस की प्राथमिकता के साथ सूक्ष्म मुद्दे हैं।
आपके मामले में, परिणाम यह है कि यह शामिल होने की स्थिति का मूल्यांकन कर रहा है LEFT JOIN
u
. से पहले तालिका उपनाम मौजूद है। इसलिए यह नहीं जानता कि u.usr_auto_key
है।
आप JOIN
. का उपयोग करके इस समस्या को ठीक कर सकते हैं सभी जॉइन के लिए सिंटैक्स:
SELECT
`u`.`usr_auto_key` AS `u__usr_auto_key`,
`s`.`set_auto_key` AS `s__set_auto_key`,
`u2`.`usr_auto_key` AS `u2__usr_auto_key`,
`u2`.`set_auto_key` AS `u2__set_auto_key`,
`u2`.`value` AS `u2__value`
FROM `User` `u` JOIN `Setting` `s`
LEFT JOIN `User_Setting` `u2` ON `u`.`usr_auto_key` = `u2`.`usr_auto_key`
WHERE (`s`.`sct_auto_key` = 1 AND `u`.`usr_auto_key` = 1 AND admin_property is null)
मुझे u
. के बीच कोई जुड़ने की शर्त नहीं दिखी और s
आपकी क्वेरी में, इसलिए मुझे लगता है कि आप इसे कार्टेशियन उत्पाद बनाना चाहते हैं?
शामिल होने के लिए दो सिंटैक्स रूपों के बीच बातचीत के बारे में अधिक विवरण के लिए, MySQL 5.0.12 में प्रसंस्करण परिवर्तन में शामिल हों अनुभाग देखें। पेज पर http://dev.mysql.com/doc/ रेफमैन/5.0/hi/join.html
अपनी टिप्पणी दें:जैसा कि मैंने कहा, इसे ऑपरेटर प्राथमिकता के साथ करना है। यदि आपके पास एक SQL क्वेरी है जिसमें FROM A, B JOIN C
. है तो यह B JOIN C
. का मूल्यांकन करता है इससे पहले कि वह A
. पर कोई ध्यान दे -- जिसमें टेबल एलियास असाइन करना शामिल है। तो अगर B JOIN C
. के लिए आपकी जॉइन कंडीशन A
. के लिए टेबल एलियास का उपयोग करता है आपको एक त्रुटि मिलती है क्योंकि वह उपनाम अभी तक मौजूद नहीं है।
यदि आप इसे उल्टा करते हैं और B, A JOIN C
run चलाते हैं फिर जब यह A JOIN C
. के लिए शामिल होने की स्थिति का मूल्यांकन करता है A
. के लिए उपनाम उपलब्ध है और यह काम करता है (इस मामले में कम से कम)।
लेकिन यह एक नाजुक समाधान है, क्योंकि आपको एक ऐसी क्वेरी की भी आवश्यकता हो सकती है जिसे केवल A
को पुन:व्यवस्थित करके ठीक नहीं किया जा सकता है और B
. कॉमा के साथ पुराने जॉइन सिंटैक्स का उपयोग करना बंद करना बेहतर है। फिर किसी भी जॉइन एक्सप्रेशन की आपके सभी टेबल एलियासेस तक पहुंच होती है और आपको किसी भी क्वेरी में यह समस्या कभी नहीं होगी।