2011-01-27 26 views
16

Neden # 1060 olsun çoğaltın - sütun adını yinelenen 'kimlik'# 1060 - sütun adı 'id'

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

Bildiğiniz gibi, bu bir SOL birleştirmesi olduğundan, birleştirilmiş tablodaki satırlar COUNT (*) tarafından döndürülen satır sayısını etkilemiyor mu? Siz de 'SELECT COUNT (*)' TİPİ ipucundan ' – Mchl

+0

Hayır! Bekle! ... GROUP BY ... var ama toplama fonksiyonu yok ... bu sorgu sadece mantıklı değil. – Mchl

+0

'id'' 'ipuçlarında' 'PRIMARY KEY'' id? 'Tip_usage' içinde bir ipucu için bir kaydın yoksa, bu ipucu sayılmalıdır? – Quassnoi

cevap

24

Muhtemelen select * yılında * tip_usage ve tips aynı isimde iki sütun seçer çünkü.

+1

... ve "alt sorgu seçim listesindeki sütunlar [olmalıdır] (http: // dev) .mysql.com/doc/refman/5.7/tr/from-clause-subqueries.html) benzersiz adlar. " –

12

Muhtemelen, iç seçmenin id adıyla iki sütun vermesidir. Eğer bu sütunları kullandığınız Since, sadece select değiştirebilirsiniz:

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

Sorgunuz bu eşdeğerdir:

SELECT COUNT(DISTINCT id) 
FROM tips 

, bir birleştirmede gerek yoktur.

Bunun yerine bir INNER JOIN istemediğinden emin misiniz?