2011-01-27 18 views
16

मैं # 1060 क्यों मिलता - डुप्लीकेट कॉलम नाम 'आईडी'# 1060 - डुप्लीकेट कॉलम नाम 'आईडी'

SELECT COUNT(*) FROM (SELECT * FROM `tips` `t` LEFT JOIN 
tip_usage ON tip_usage.tip_id=t.id GROUP BY t.id) sq 
+0

क्या आप जानते हैं, चूंकि यह एक बाएं शामिल है, इसलिए शामिल तालिका में पंक्तियां COUNT (*) द्वारा लौटाई गई पंक्तियों की संख्या को प्रभावित नहीं करती हैं? आप सुझावों से 'COUNT चुनें (*)' – Mchl

+0

नहीं कर सकते हैं! रुको! ... एक समूह है ... लेकिन कोई समेकित कार्य नहीं ... इस क्वेरी को कोई समझ नहीं आता है। – Mchl

+0

'टिप्स' पर 'id' 'प्राथमिक कुंजी' है? यदि आपके पास 'tip_usage' में किसी टिप के लिए रिकॉर्ड नहीं है, तो क्या इस टिप की गणना की जानी चाहिए? – Quassnoi

उत्तर

24

शायद क्योंकि select * में * tip_usage और tips से ही नाम के दो स्तंभों का चयन करता है।

+1

... और "सबक्वायरी चयन सूची में कोई भी कॉलम [होना चाहिए] (http: // dev .mysql.com/डॉक्टर/refman/5.7/en/from-clause-subqueries.html) अद्वितीय नाम। " –

12

शायद ऐसा इसलिए है क्योंकि आंतरिक चयन id नाम के साथ दो कॉलम उत्पन्न करता है। जब से तुम उन स्तंभों का उपयोग नहीं कर रहे हैं, तो आप सिर्फ करने के लिए चयन बदल सकते हैं:

SELECT COUNT(*) FROM (SELECT t.id FROM `tips` `t` 
LEFT JOIN tip_usage ON tip_usage.tip_id=t.id 
GROUP BY t.id) sq 
3

आपकी क्वेरी इस के बराबर है:

SELECT COUNT(DISTINCT id) 
FROM tips 

, एक में शामिल होने में कोई जरूरत नहीं है।

क्या आप वाकई INNER JOIN नहीं चाहते थे?

संबंधित मुद्दे