mysql - 检查来自不同表的 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;
解决方案
您想要一个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;
推荐阅读
- wordpress - 如何访问循环内的 WordPress 帖子管理数据?
- python - if语句在python中被忽略
- php - max_user_connections - 查找原因/打开连接
- php - mysql json中的字符集
- c# - 如何使用 Windows Server 2016 上的本地帐户获得对安全事件日志的完全读取权限
- r - 连续保持前 3 个值,将其他所有值更改为 NA
- docker - 找不到加载 Docker 映像的文件
- javascript - 卡片轮播,在 CSS 中使用 React 堆叠
- stripe-payments - 来自 api 端点的通用链接
- python - 具有概率目标的决策树