Mysql 检查不同表中的ID
我有两张桌子:“rota”1和“志愿者”2。“名字”和“姓氏”列在2中,但移位在1中。通过下面的查询,我可以看到已经提交轮班表的员工的姓名,但我希望看到没有提交轮班表的员工的姓名。我不知道该怎么做。有什么帮助吗Mysql 检查不同表中的ID,mysql,sql,phpmyadmin,Mysql,Sql,Phpmyadmin,我有两张桌子:“rota”1和“志愿者”2。“名字”和“姓氏”列在2中,但移位在1中。通过下面的查询,我可以看到已经提交轮班表的员工的姓名,但我希望看到没有提交轮班表的员工的姓名。我不知道该怎么做。有什么帮助吗 SELECT COUNT(rota.shift_id), rota.volunteer_id, volunteer.firstname, volunteer.lastname FROM rota INNER JOIN volunteer ON rota.volunteer_id=vol
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;
您需要一个左联接-并将志愿者表放在第一位,因为您需要该表中的所有行:
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;
请注意,您不需要在GROUP BY中包含来自志愿者的所有列,因为v.id唯一地标识结果集中的每一行
编辑:
如果您希望志愿者不轮班,请使用“不存在”:
使用“左联接”可以等效地执行此操作:
您需要一个左联接-并将志愿者表放在第一位,因为您需要该表中的所有行:
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;
请注意,您不需要在GROUP BY中包含来自志愿者的所有列,因为v.id唯一地标识结果集中的每一行
编辑:
如果您希望志愿者不轮班,请使用“不存在”:
使用“左联接”可以等效地执行此操作:
这就是解决方案:
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;
这就是解决方案:
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;
谢谢你,戈登。下面是我最后做的。谢谢戈登。看看下面我最后做了什么。这不是一个好办法。您正在进行不必要的聚合。感谢您的帮助Gordon,您的上述解决方案非常有效。这不是一个好办法。您正在进行不必要的聚合。感谢您的帮助Gordon,您的上述解决方案非常有效!