Mysql
 sql >> Database >  >> RDS >> Mysql

Unisci due tabelle mysql, uno a molti relazione

Devi usare GROUP BY per spiegare su quali raggruppamenti contare. Senza GROUP BY ottieni solo un singolo gruppo dell'intero set di risultati, come hai visto.

In SQL standard è necessario includere nel GROUP BY clausola ogni espressione non aggregata inclusa in SELECT clausola, ma MySQL ti consente di farla franca senza farlo, consentendo un'espressione come la seguente. (Almeno, quando non in modalità rigorosa; non sono sicuro che la modalità rigorosa rafforzi questo requisito per soddisfare lo standard SQL)

SELECT `items`.*, COUNT(1) AS points
FROM `items` INNER JOIN `points` ON `items`.`id` = `points`.`item_id`
WHERE ...
GROUP BY `items`.`id`

Supponendo che items.id è la chiave primaria di questa tabella, quindi non apparirà in più di una riga di items , questo dovrebbe avere l'effetto desiderato.

Dopo aver introdotto GROUP BY è importante capire la differenza tra WHERE e HAVING clausole. Il primo applica la condizione prima si applicano il gruppo e gli aggregati, mentre il secondo si applica successivamente . Ciò significa che devi utilizzare HAVING se vuoi fare un condizionale basato su quel conteggio; il WHERE la clausola nel tuo esempio iniziale si applicherà prima dell'aggregato, quindi il risultato sarà il conteggio dei punti creati dopo la data indicata.