2011-01-27 1 views
16

motivo per cui ho # 1060 - Duplica nome della colonna 'id'# 1060 - Duplica nome della colonna '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

Sei consapevole del fatto che, poiché si tratta di un join LEFT, le righe nella tabella unita non influenzano il numero di righe restituite da COUNT (*)? Si potrebbe anche fare 'SELECT COUNT (*) FROM tips' – Mchl

+0

No! Aspetta! ... c'è un GROUP BY ... ma nessuna funzione di aggregazione ... questa query non ha alcun senso. – Mchl

+0

È 'id' a' PRIMARY KEY' su 'tips'? Se non hai un record per un suggerimento in 'tip_usage', questo suggerimento dovrebbe essere contato? – Quassnoi

risposta

24

Probabilmente perché l'* in select * sceglie due colonne con lo stesso nome da tip_usage e tips.

+1

... e "qualsiasi colonna nell'elenco selezione sottoquery [deve contenere] (http: // dev .mysql.com/doc/refman/5.7/it/from-clause-subqueries.html) nomi univoci. " –

12

Probabilmente è perché la selezione interna produce due colonne con il nome id. Dal momento che non si utilizza quelle colonne, si può semplicemente cambiare la selezione per:

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

ricerca equivale a questo:

SELECT COUNT(DISTINCT id) 
FROM tips 

, non c'è bisogno in un join.

Sei sicuro di non volere uno INNER JOIN?