2012-12-18 27 views
5

मुझे अपने इनर जॉइन सबक्वायरी के खंड में कोई समस्या है। मुझे M.idMembre के लिए अज्ञात कॉलम त्रुटि प्राप्त हो रही है। मैंने उपनाम के बजाय तालिका नाम का उपयोग करने का प्रयास किया है, लेकिन मुझे एक ही समस्या मिलती है। मैंने subquery से WHERE क्लॉज को हटाने का प्रयास किया है और उपखंड के बाद चालू स्थिति में इस स्थिति को जोड़ना है। हालांकि, मुझे एक ही समस्या है या तो। मुझे लगता है कि यह कुछ स्पष्ट है कि मैं यहाँ याद कर रहा हूं।सबक्वायरी में अज्ञात कॉलम जहां क्लॉज

SELECT DISTINCT M.`idMembre` , `couponsTypes`.`maxCouponType` 
FROM membres AS `M` 
INNER JOIN (
SELECT idMembre, MAX(coupons.`idType`) AS `maxCouponType` 
FROM coupons 
WHERE coupons.`idMembre` = M.`idMembre` 
GROUP BY idMembre 
) AS `couponsTypes` 
ON M.`idMembre` = couponsTypes.`idMembre` 
ORDER BY maxCouponType DESC 

मुझे और जानकारी चाहिए यदि आपको अधिक जानकारी चाहिए।

+0

आप किसी भी शामिल मानदंड का उपयोग नहीं करते हैं, आंतरिक शामिल ... ऑन ... –

+0

मैंने नियमित INNER जॉइन प्रारूप के साथ भी प्रयास किया है लेकिन मुझे इस कॉलम के लिए एक ही त्रुटि मिल रही है। 'का चयन करें DISTINCT M.idMembre, couponsTypes.maxCouponType membres से एम अंदरूनी शामिल हों (चयन मैक्स (coupons.idType) maxCouponType के रूप में कूपन से) couponsTypes पर M.idMembre = coupons.idMembre आदेश के रूप में maxCouponType DESC' – oliboon

+0

द्वारा कूपन टेबल के लिए उपनाम का उपयोग करके मुझे एक अज्ञात कॉलम समस्या भी मिलती है। – oliboon

उत्तर

7

आप एक खंड में शामिल होने में एक सबक्वेरी में बाहरी तालिकाओं को संदर्भित करने की अनुमति नहीं है: आप केवल तालिकाओं सीधे शामिल होने और समूह परिणाम की जरूरत है। इस को हल करने के एक तरीका यह सबक्वेरी में शामिल होने के स्थिति के आधार पर में एक group by करके है:

SELECT DISTINCT M.`idMembre`, `couponsTypes`.`maxCouponType` 
FROM membres AS `M` INNER JOIN 
    (SELECT idMembre, MAX(coupons.`idType`) AS `maxCouponType` 
     FROM coupons 
     group by idmembre 
    ) `couponsTypes 
    on couponstypes.idMembre = M.idMember 
ORDER BY maxCouponType DESC 

लेकिन, आप सब पर membres तालिका जरूरत नहीं है। हालांकि बाहरी select में संदर्भित किया गया है, यह कूपन प्रकार तालिका में सदस्य आईडी के बराबर है। इसलिए, आप अपनी क्वेरी लिख सकते हैं:

 SELECT idMembre, MAX(coupons.`idType`) AS `maxCouponType` 
     FROM coupons 
     group by idmembre 
     order by 2 desc 

यह शायद सबसे सरल और सबसे प्रभावी तरीका फॉर्मूलेशन है।

+0

क्या घटना में प्रश्नों के बीच कोई अंतर है कि सदस्य 'membre' तालिका में अद्वितीय नहीं हैं? उस के चारों ओर मेरे सिर को काफी नहीं मिल सकता है, लेकिन मुझे सिर्फ एक उज्ज्वल लंचियन से घर मिला है ... – eggyal

+0

@eggyal। । । इस मामले में, वास्तव में कोई अंतर नहीं है। 'विशिष्ट' डुप्लीकेट हटा देता है। मैं इस तरह से सवाल नहीं लिखूंगा, लेकिन कोई फर्क नहीं पड़ता। –

+0

'membres' के बारे में भी अच्छी बात अनावश्यक है। – eggyal

1

आपकी उप-तालिका में बाहरी क्वेरी में तालिकाओं तक पहुंच नहीं है। यही है, membres तालिका (M के रूप में उपनाम) उस समय उपलब्ध नहीं है जब couponsTypes सबक्वायरी का मूल्यांकन किया जाता है।

हालांकि, इस मामले में ऐसी सबक्विरी आवश्यक नहीं होनी चाहिए;

SELECT idMembre, MAX(coupons.idType) AS maxCouponType 
FROM  membres JOIN coupons USING (idMembre) 
GROUP BY idMembre 
ORDER BY maxCouponType DESC