mysql - एक क्वेरी में एएनएसआई 1992 के जॉन्स और कमांड्स को मिलाते हुए




join inner-join (2)

मैं कुछ डेटा लाने के लिए निम्न MySQL क्वेरी का प्रयास कर रहा हूं:

SELECT m.*, t.*
FROM memebers as m, telephone as t
INNER JOIN memeberFunctions as mf ON m.id = mf.memeber
INNER JOIN mitgliedTelephone as mt ON m.id = mt.memeber
WHERE mf.function = 32

लेकिन मुझे हमेशा निम्न त्रुटि मिलती है:

#1054 - Unknown column 'm.id' in 'on clause'

कॉलम मौजूद है और क्वेरी केवल एक तालिका के साथ ठीक काम करती है (उदाहरण के लिए जब मैं टेलीफ़ोन को हटा देता हूं)

क्या कोई जानता है कि मैं क्या गलत करता हूं?


ऐसा लगता है कि आपकी आवश्यकता members मेजबानी में शामिल होना है, लेकिन आप telephone तालिका के साथ जुड़ रहे हैं बस अपने आदेश बदल

SELECT 
    `m`.*,
    `t`.* 
FROM
    `memebers` AS `m` 
    JOIN `telephone` AS `t` 
    JOIN `memeberFunctions` AS `mf` 
        ON `m`.`id` = `mf`.`memeber` 
        AND `mf`.`function` = 32 
    JOIN `mitgliedTelephone` AS `mt` 
        ON `m`.`id` = `mt`.`memeber`;

आशा है कि यह आपको मदद करता है धन्यवाद!!


इस लिंक के अनुसार, जुड़ने के बाद आपको दोनों नोटिशन को मिला नहीं जाना चाहिए। अल्पविराम जो आप memebers as m, telephone as t शामिल करने के लिए उपयोग कर रहे हैं memebers as m, telephone as t , और आने वाले कॉलों में inner join कारण, अज्ञात स्तंभ त्रुटि को ट्रिगर कर रहे हैं

इससे निपटने के लिए, CROSS/INNER/LEFT JOIN बजाय CROSS/INNER/LEFT JOIN उपयोग करें

पहले, अल्पविराम ऑपरेटर (,) और जुड़ने दोनों में एक ही प्राथमिकता थी, इसलिए जुड़ने की अभिव्यक्ति टी 1, टी 2 जॉइन टी 3 को ((टी 1, टी 2) JO3 में जोड़ा गया)। अब JOIN में उच्च प्राथमिकता है, इसलिए अभिव्यक्ति (टी 1, (टी 2 JOIN टी 3) के रूप में व्याख्या की गई है)। यह परिवर्तन ऐसे कथनों को प्रभावित करता है जो एक सेक्शन का उपयोग करते हैं, क्योंकि यह खंड केवल शामिल होने के ऑपरेंड्स में कॉलमों को संदर्भित कर सकता है, और पूर्ववर्ती परिवर्तन में उन ऑपरेंडों की व्याख्या की गई है।

शैक्षणिक उद्देश्य के लिए, मैं इस प्रश्न को जोड़ रहा हूं, मुझे लगता है, ये होना चाहिए:

SELECT m.*, t.*
FROM memebers as m 
    JOIN telephone as t
    JOIN memeberFunctions as mf ON m.id = mf.memeber AND mf.function = 32
    JOIN mitgliedTelephone as mt ON m.id = mt.memeber

चूंकि आप t और m शामिल नहीं हो रहे हैं, इसलिए अंतिम परिणाम एक कार्टेशियन उत्पाद होगा; आप इसे संशोधित करने के लिए चाहते हो सकता है

मुझे आशा है कि इसमें मदद मिलेगी





inner-join