Mysql 检查不同表中的ID

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

我有两张桌子:“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=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,您的上述解决方案非常有效!