mysql - 统计有工作或正在类的囚犯人数

标签 mysql

表格如下:

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/

相关文章:

mysql - 玩! Framework 1.2.4 --- C3P0 设置以避免通信链路故障导致空闲时间

php - 如何转换这个 echo ?使用这种方法

php - 使用 yii2 备份 MySQL 表时出错

php - 没有从模型查询中获得预期的输出。我应该使用什么查询?

mysql - SELECT 语句中表达式的执行顺序

MySQL错误: Incorrect datetime value: '01/27/1989' for function str_to_date

mysql - 如何在不使用嵌套查询的情况下找到没有员工的部门?

MySQL排序性能差

mysql - 将扑克牌的事件存储在数据库中

mysql - 选择数据库中除最新 3 个条目之外的所有条目