我有两个表 A 和 B,当所有子项(表 B 中)满足条件时,我只需要父项 A 的行。如果 B 中的一行不符合条件,那么我不需要父 A 的行。我想我需要在这里使用存在,但不展示如何使用。
以下是数据表:
表A
Primary Key Level
1 low
2 low
3 high
4 high
5 low
Run Code Online (Sandbox Code Playgroud)
表B
Primary Key Phase Parent Primary Key
1 open 1
2 open 1
3 close 1
4 close 2
5 close 2
6 close 3
7 open 4
8 open 4
9 open 5
10 close 5
Run Code Online (Sandbox Code Playgroud)
我正在尝试的查询:
select *
from table_a, table_b
where table_a.level = 'low' and
table_b.phase = 'close' and
table_a.primary_key=table_b.parent_primary_key
Run Code Online (Sandbox Code Playgroud)
但我的查询也会返回 table_a.primary_key = 5 的行。
基本上,我想要返回的唯一行是当 table_A.primary_key = 2 时,因为级别较低,并且两个子行都有一个等于 close 的阶段。
谢谢你!
这是你想要的吗
select a.*
from table_a a
where a.level = 'low' and
not exists (select 1
from table_b b
where b.parent_primary_key = a.primary_key and
b.phase <> 'close'
);
Run Code Online (Sandbox Code Playgroud)
这not exists是双重否定。它检查是否没有子项具有除'close'- 以外的阶段 - 这基本上相当于说所有子项都是'close'。(如果NULL允许值,则逻辑并不完全相同。)
| 归档时间: |
|
| 查看次数: |
2444 次 |
| 最近记录: |