sql - 基于公共列值Oracle SQL选择多行
问题描述
我有一个用户表说:
ID | 姓名 | Ref_ID | 积极的 |
---|---|---|---|
1 | 美国广播公司 | 100 | 1 |
2 | BCD | 200 | 0 |
3 | CDE | 300 | 1 |
4 | 国防军 | 300 | 0 |
5 | EFG | 300 | 1 |
6 | 生长激素 | 400 | 0 |
7 | 全球健康指数 | 400 | 0 |
8 | HIJ | 500 | 1 |
9 | 伊克 | 500 | 1 |
我想查找在同一个 Ref_ID 下都处于非活动状态的那些用户的 ID 和名称。我的意思是,例如有 3 个用户的 Ref_ID = 300 并且并非所有用户都处于非活动状态,所以我不希望这些用户出现在结果中。对于 Ref_ID = 400 的用户,所有用户都处于非活动状态,因此我希望他们在结果集中。我正在尝试实现与此类似的结果:
ID | 姓名 |
---|---|
2 | BCD |
6 | 生长激素 |
7 | 全球健康指数 |
我怎样才能做到这一点?我曾尝试使用 group by 和 inner join 查询,但无法正确使用它们。
解决方案
您可以使用not exists
:
select t.*
from t
where not exists (select 1
from t t2
where t2.ref_id = t.ref_id and t2.active = 1
);
或窗口函数:
select t.*
from (select t.*,
max(active) over (partition by ref_id) as max_active
from t
) t
where max_active = 0;
推荐阅读
- angular - 带有chart.js的角度-图例位置
- domain-driven-design - 如何包装 Hangfire 取消令牌?
- c++ - 线程会影响 Raspberry Pi 上的图像处理性能吗?
- wordpress - 将图像上传到上传目录时出现问题
- php - 用php将数据mysql显示到json的问题
- javascript - 版本更改时jQuery中的问题
- excel - 使用粘贴和插入行将数据从一张纸复制到另一张纸
- laravel - Laravel 任何工匠命令都返回“未捕获的错误:调用成员函数报告()”
- mysql - 使用mysql结果批量执行bash命令
- node.js - Lambda 函数无法在 S3 上创建文件