我有如下查询,它的目的是
将所有提交内容的ID返回到比赛2中,包括他们被阅读的次数。
它正在做的一切都很好,除了它还从所有其他比赛返回的行;为什么不只是加入`competition_id` = 2
?
SELECT
`c`.`competition_id`,
`c`.`submission_id`,
COUNT(
`submission_reads`.`submission_id`
) `reads`
FROM
`submission_reads`
RIGHT JOIN `competition_submissions` c
ON `c`.`submission_id` = `submission_reads`.`submission_id`
AND c.top_round = 1
AND c.`competition_id` = 2
GROUP BY `c`.`submission_id`
答案 0 :(得分:3)
在RIGHT
联接中,您可以从右侧的表中获取所有行; ON
子句限制左侧表中的匹配行,即submission_reads
表。如果您想限制competition_submissions
行,则需要将联接从RIGHT
更改为LEFT
。
评论:“我想要
competition_submissions
表中的所有行,无论它是否在submission_reads
中都有一个条目
然后你需要使c.competition_id = 2
子句成为WHERE
子句的一部分,因为你希望它过滤外连接中“main”表的行:
SELECT
`c`.`competition_id`,
`c`.`submission_id`,
COUNT(
`submission_reads`.`submission_id`
) `reads`
FROM
`competition_submissions` c
LEFT JOIN `submission_reads` r
ON `c`.`submission_id` = `r`.`submission_id`
AND `c`.top_round = 1
WHERE `c`.`competition_id` = 2
GROUP BY `c`.`submission_id`