检查来自不同表的ID

时间:2019-07-05 11:19:20

标签: mysql sql phpmyadmin

我有两个表:“ rota”(1)和“ volunteer”(2)。名字和姓氏列在(2)中,但移位在(1)中。通过以下查询,我可以看到已提交班次的人员的姓名,但我希望看到未提交班次的人员的姓名。无法弄清楚如何。有帮助吗?

SELECT COUNT(rota.shift_id), rota.volunteer_id, volunteer.firstname, volunteer.lastname
FROM rota 
INNER JOIN volunteer ON rota.volunteer_id=volunteer.id
GROUP BY volunteer_id;

2 个答案:

答案 0 :(得分:4)

您想要一个LEFT JOIN -并将volunteer表放在第一位,因为您想要该表中的所有行:

SELECT v.id, v.firstname, v.lastname, COUNT(r.shift_id), rota.volunteer_id
FROM volunteer v LEFT JOIN
     rota r 
     ON r.volunteer_id = v.id
GROUP BY v.id;

请注意,您无需在volunteer中包含GROUP BY中的所有列,因为v.id唯一地标识结果集中的每一行。

编辑:

如果您希望志愿者不做任何轮班,请使用NOT EXISTS

SELECT v.*
FROM volunteer v
WHERE NOT EXISTS (SELECT 1
                  FROM rota r 
                  WHERE r.volunteer_id = v.id
                 );

您可以等效地使用LEFT JOIN进行此操作:

SELECT v.id, v.firstname, v.lastname
FROM volunteer v LEFT JOIN
     rota r 
     ON r.volunteer_id = v.id
WHERE r.volunteer_id IS NULL;

答案 1 :(得分:0)

这是解决方案:

SELECT volunteer.id, volunteer.firstname, volunteer.lastname, COUNT(rota.shift_id), rota.volunteer_id, volunteer.firstname, volunteer.lastname 
FROM volunteer 
LEFT JOIN rota ON rota.volunteer_id = volunteer.id 
GROUP BY volunteer.id
HAVING COUNT(rota.shift_id) = 0;