下面的查询旨在返回一个事件列表,其中包含事件名称、分配给事件的用户数、留下的评论数以及分配给事件的用户的一组名称。
如果我把join放在comments或assignments表上,而不是同时放在这两个表上,一切都正常!
如果我把两个数都加起来,所有的数都会相乘。如果一个事件有3条评论,并且分配了5个用户,则评论计数和用户计数将为5 x 3=15。此外,组\u concat将返回每个用户名3次,如下所示: Joe, Joe, Joe, Mike, Mike, Mike,...
而不是 Joe, Mike,...
我希望有人能解释一下原因。并发布解决方案:)
SELECT
e.id_eve,
e.title_eve,
v.name_ven,
COUNT(a.ideve_ass) AS count_ass,
COUNT(c.ideve_com) AS count_com,
GROUP_CONCAT(u.firstname_usr) AS users_eve
FROM
rsevents_eve AS e
LEFT JOIN venues_ven v ON e.idven_eve = v.id_ven
LEFT JOIN rscomments_com c ON c.ideve_com = e.id_eve
LEFT JOIN rsassignments_ass a ON a.ideve_ass = e.id_eve
LEFT JOIN users_usr u ON u.id_usr = a.idusr_ass
GROUP BY
e.id_eve
1条答案
按热度按时间osh3o9ms1#
你沿着不同的维度聚集,所以你得到了每个事件的笛卡尔积。
有几种解决办法。一种是预先聚合每个表。我将建议一个替代的相关子查询:
第三种解决方法是
DISTINCT
在每个COUNT()
以及GROUP_CONCAT()
. 但是,如果您在JOIN
钥匙。