我有以下子目录表。
mysql> select * from suborder;
+-------------+------------------+
| order_state | booking_group_id |
+-------------+------------------+
| CNF | 1 |
| CNF | 1 |
| CNF | 2 |
| BLK | 1 |
| CNF | 2 |
+-------------+------------------+
我想获取所有order_state为CNF的所有booking_group_id。因此对于上面的数据,结果应该只是值'2',因为两行都有order_state = CNF,其中对于booking_data_id'1',两行是CNF,一行是BLK,所以不会是输出的一部分。
由于
答案 0 :(得分:2)
您可以对使用条件聚合的HAVING
子句使用分组:
select booking_group_id
from suborder
group by booking_group_id
having count(case when order_state <> 'CNF' then 1 end) = 0
或者您可以使用NOT EXITS
:
select distinct *
from suborder AS s1
where order_state = 'CNF' and
not exists (select 1
from suborder AS s2
where s2.booking_group_id = s1.booking_group_id and
s2.order_state <> 'CNF')
答案 1 :(得分:0)
过滤没有order_state != 'CNF'
SELECT DISTINCT booking_group_id FROM suborder
WHERE order_state = 'CNF' AND booking_group_id not in
(SELECT DISTINCT booking_group_id from suborder WHERE order_state != 'CNF' )
WHERE 子句中的子查询获取所有booking_group_id
的{{1}}列表,其中包含条件order_state != 'CNF'
的记录,并且在该主查询后筛选除了存在的所有ID之外的所有ID在子查询中。
需要注意的另一点:此处使用的子查询将一次执行,因为它独立于主查询。