表格如下:

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/

10-13 06:07