2011-01-27 131 views
16

为什么我得到#1060 - 重复列名 '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(*)返回的行数?你也可以做`SELECT COUNT(*)FROM tips` – Mchl 2011-01-27 11:22:04

+0

不!等等!...有一个GROUP BY ...但没有聚合函数...这个查询没有任何意义。 – Mchl 2011-01-27 11:24:22

回答

24

可能是因为select *的*从tip_usagetips选择具有相同名称的两列。

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吗?