sql >> Base de Datos >  >> RDS >> Mysql

Unir dos tablas mysql, relación de uno a muchos

Necesitas usar GROUP BY para explicar en qué agrupaciones se debe contar. Sin GROUP BY solo obtienes un solo grupo de todo el conjunto de resultados, como viste.

En SQL estándar es necesario incluir en el GROUP BY cláusula cada expresión no agregada que se incluye en el SELECT cláusula, pero MySQL le permite salirse con la suya sin hacer esto, permitiendo una expresión como la siguiente. (Al menos, cuando no está en modo estricto; no estoy seguro de si el modo estricto refuerza este requisito para que coincida con SQL estándar)

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

Suponiendo que items.id es la clave principal de esta tabla, por lo que no aparecerá en más de una fila de items , esto debería tener el efecto deseado.

Una vez que introduzcas GROUP BY es importante entender la diferencia entre WHERE y HAVING cláusulas. El primero aplica la condición antes se aplican el grupo y los agregados, mientras que este último se aplica después . Esto significa que debe usar HAVING si quieres hacer un condicional basado en ese conteo; el WHERE La cláusula en su ejemplo inicial se aplicará antes del agregado, por lo que el resultado será el recuento de puntos creados después de la fecha dada.