mysql - 用于过滤至少一行中具有特定值的所有行的 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 作为状态。
对此有什么好的和有效的查询?
提前致谢!
解决方案
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);
推荐阅读
- javascript - 在浏览器上,无法在最新的三星 s10 和 s20 手机中使用 navigator.getusermedia js 访问后置摄像头(注:最新手机中的 3 个后置摄像头)
- c - 为什么将 SIGTTOU 信号传递给进程?
- java - ES错误:请求处理失败;[172.17.1.128:9300][索引:数据/读取/搜索[相位/dfs]]];
- java - 我的通知频道未创建
- postal-code - 操作系统数据中心 - 网格参考中的邮政编码
- javascript - 为什么我的 React TS 组件库中的某些组件会抛出 Minified React 错误 #321
- r - 我是否需要减少 R 中的 for 循环以及如何减少?
- javascript - 如何在反应(钩子)中更新值而不是重新渲染完整的应用程序?
- extjs - Ext js resizable / collapsable panel resize问题
- python - Pandas Column Min - 变量窗口