Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Junte duas tabelas mysql, relacionamento um para muitos


Você precisa usar GROUP BY para explicar em quais agrupamentos contar com base. Sem GROUP BY você apenas obtém um único grupo de todo o conjunto de resultados, como você viu.

No SQL padrão é necessário incluir no GROUP BY cláusula toda expressão não agregada incluída no SELECT cláusula, mas o MySQL permite que você não faça isso, permitindo uma expressão como a seguinte. (Pelo menos, quando não estiver no modo estrito; não tenho certeza se o modo estrito fortalece esse requisito para corresponder ao SQL padrão)
SELECT `items`.*, COUNT(1) AS points
FROM `items` INNER JOIN `points` ON `items`.`id` = `points`.`item_id`
WHERE ...
GROUP BY `items`.`id`

Supondo que items.id é a chave primária desta tabela e, portanto, não aparecerá em mais de uma linha de items , isso deve ter o efeito desejado.

Depois de introduzir GROUP BY é importante entender a diferença entre o WHERE e HAVING cláusulas. O primeiro aplica a condição antes o grupo e os agregados são aplicados, enquanto o último se aplica depois . Isso significa que você deve usar HAVING se você quiser fazer uma condicional com base nessa contagem; o WHERE A cláusula em seu exemplo inicial será aplicada antes da agregação, portanto, o resultado será a contagem de pontos criados após a data especificada.