2011-01-27 9 views
16

私は#1060を取得する理由 - select *中*はtip_usagetipsから同じ名前を持つ2つの列を選択するため、重複する列名 'ID'#1060 - 重複列名 '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

LEFT結合であるため、結合された表の行はCOUNT(*)によって返される行の数に影響しないことを認識していますか?あなたは 'COUNT(*)FROM tips'を – Mchl

+0

いいえ!待って!... GROUP BYがありますが、集約関数はありません...このクエリは意味がありません。 – Mchl

+0

'id'は' tips'の 'PRIMARY KEY'ですか? 'tip_usage'にヒントのレコードがない場合は、このヒントを数えますか? – Quassnoi

答えて

24

を。

+1

...「サブクエリ選択リストの任意の列は必須です(http:// dev .mysql.com/doc/refman/5.7/ja/from-clause-subqueries.html)の一意の名前です。 –

12

おそらく、それは内部セレクタが名前がidの2つのカラムを生成するからです。あなたはそれらの列を使用していないので、あなただけの選択を変更することができます。

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を代わりに使用してもよろしいですか?

関連する問題