表格如下:
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
,以防囚犯从事多项工作或参加多个类(class),否则会多次对囚犯进行计数。
关于mysql - 统计有工作或正在类的囚犯人数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23666050/