我有两个表,其中一个表称为 participants_tb ,第二个表称为 allocation_tb 。在 participant_tb 上,我的列为 participant_id ,名称,用户名。 在distribution_tb下,我的列为 allocation_id ,发件人用户名,接收者用户名,完成。 完成列包含以下三个数字中的任何一个:0、1、2。
我使用此sql语句获取我的值
SELECT *, COUNT(done) d
FROM participants_tb
JOIN allocation_tb ON (username=receiver_username)
WHERE done = 0 || done = 1
GROUP BY receiver_username
它工作得很好,我的问题是,我希望它也将参与者的信息包括在partners_tb中,而不是在location_tb中。我尝试使用左外部联接,但是它没有按预期方式工作,因为我希望它包含仅在partners_tb中而不是在allocate_tb中的参与者,因为完成在location_tb中的where子句中,将不包含这些信息。
答案 0 :(得分:1)
您似乎想要:
SELECT p.*, COUNT(a.done) as d
FROM participants_tb p LEFT JOIN
allocation_tb a
ON p.username = a.receiver_username) AND
a.done IN (0, 1)
GROUP BY p.participant_id;
注意:
LEFT JOIN
保留所有参与者。GROUP BY
必须在第一张桌子上。SELECT p.*
与GROUP BY
结合使用-假设GROUP BY
键是唯一的(或主键)。IN
是表达逻辑的一种简便方法。