首页 > 解决方案 > sql查询有入口但没有出口的记录

问题描述

我有一张旅行桌

travellers(id,full_name)

和另一张 traveller_history 表

travellers_history(id,traveller_id,status)

travellers_history 中的状态是一个数字字段

我想要记录在 traveller_history 记录中具有状态 11 记录但在 traveller_history 中没有状态 12 记录的所有旅行者的记录。如何在 sql 中实现这一点?

标签: mysqlsql

解决方案


加入表格,按旅行者分组并在have子句中设置条件:

select t.id, t.full_name 
from travellers t inner join travellers_history h
on h.traveller_id = t.id
group by t.id, t.full_name
having sum(h.status = 12) = 0 and sum(h.status = 11) > 0

或者:

select t.id, t.full_name 
from travellers t inner join travellers_history h
on h.traveller_id = t.id
where h.status in (11, 12)
group by t.id, t.full_name
having max(h.status) = 11

推荐阅读