2011-01-27 29 views
16

¿Por qué me sale # 1060 - Duplicar nombre de la columna 'id'# 1060 - Duplicar nombre de la columna '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

¿Sabía que, dado que es una combinación IZQUIERDA, las filas en la tabla unida no influyen en el número de filas devueltas por COUNT (*)? Puede hacer 'SELECT COUNT (*) FROM tips' – Mchl

+0

¡No! ¡Espera! ... hay un GRUPO POR ... pero ninguna función de agregación ... esta consulta simplemente no tiene sentido. – Mchl

+0

¿Es 'id' una' PRIMARY KEY' en 'tips'? Si no tiene un registro de un consejo en 'tip_usage', ¿se debe contar este consejo? – Quassnoi

Respuesta

24

Probablemente porque el * en select * selecciona dos columnas con el mismo nombre de tip_usage y tips.

+1

... y "cualquier columna en la lista de selección de subconsulta [debe tener] (http: // dev .mysql.com/doc/refman/5.7/es/from-clause-subqueries.html) nombres únicos. " –

12

Probablemente es porque la selección interna produce dos columnas con el nombre id. Puesto que no se está utilizando esas columnas, sólo puede cambiar la selección para:

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

Su consulta es equivalente a esto:

SELECT COUNT(DISTINCT id) 
FROM tips 

, no hay necesidad de una unión.

¿Estás seguro de que no quieres un INNER JOIN en su lugar?

Cuestiones relacionadas