首页 > 解决方案 > 检查来自不同表的 ID

问题描述

我有两张表:“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;

标签: mysqlsqlphpmyadmin

解决方案


您想要一个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;

推荐阅读