首页 > 解决方案 > 用于过滤至少一行中具有特定值的所有行的 SQL 查询

问题描述

我有一个表 T 包含这样的数据:

ID    |    Status
-----------------
1     |    X
2     |    Y
1     |    Z
3     |    P
4     |    Q
3     |    Z

我需要检索 ID 在该行或任何其他行中没有状态 Z 的所有行。所以,对于上面的示例表,我需要我的查询来返回下表:

ID    |    Status
-----------------
2     |    Y
4     |    Q

ID 为 1 和 3 的行被丢弃,因为它们至少有一行的值为 Z 作为状态。

对此有什么好的和有效的查询?

提前致谢!

标签: mysqlsql

解决方案


Z您可以使用 subquery排除具有状态的 id 。

select * from datas 
where id not in ( select id from  datas 
                            where status ='Z' );

演示:https ://www.db-fiddle.com/f/7yUJcuMJPncBBnrExKbzYz/2

正如@IVO GELOV 建议的那样,您可以使用EXISTS;

select d.id,d.status 
from datas d 
where  not exists  ( select id from  datas e 
                               where status ='Z'  and d.id=e.id);

推荐阅读