表格如下:
Person
person_ssn
first_name
middle_name
last_name
Prisoner
prisoner_id
person_ssn
Work
prisoner_id
job_id
Class
prisoner_id
class_id
我对获得有工作或阶级的囚犯人数感兴趣。任何提示表示赞赏。
到目前为止我有什么
select count(prisoner.prisoner_id)
FROM prisoner
INNER JOIN work on prisoner.prisoner_id = work.prisoner_id
INNER JOIN school on prisoner.prisoner_id = school.prisoner_id;
这似乎正在返回既有工作又在学校的囚犯人数。
最佳答案
使用左联接,但通过检查联接表中的一列是否不为空,要求至少一个联接成功(缺少的左联接在联接表的列中具有所有空):
select count(distinct prisoner.prisoner_id)
from prisoner
left join work on prisoner.prisoner_id = work.prisoner_id
left join school on prisoner.prisoner_id = school.prisoner_id
where work.prisoner_id is not null
or school.prisoner_id is not null
请注意,如果囚犯有多个工作或参加多个班级,我会在计数中加上
distinct
,否则将多次计数囚犯。关于mysql - 获取有工作或正在类的囚犯人数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23666050/