我有一个条件,我需要从主表中获取所有行。除了那些在子表中满足条件的行忽略它们之外,还要从主表中获取子表中不存在的行。
以下是样本表和数据,
表 Foo
Foo_Id Foo_Name
101 A
102 B
103 C
104 D
105 E
表栏
Bar_Id Foo_id Bar_Status
21 101 Yes
22 101 No
23 102 No
24 103 Yes
25 103 No
26 103 NA
27 104 No
28 104 NA
假设我需要表 Foo 中的所有Foo_name,但表 Bar 中的Foo_id值不应为“是”。还要获取栏中不存在但出现在 Foo
中的Foo_id预期产出,
Foo_Id Foo_Name
102 B
104 D
105 E
作为'A'& “C”的值为“是”,它们会被过滤掉。
这就是我试过的,
Select F.Foo_id, F.Foo_Name
From Foo F LEFT JOIN Bar B on F.Foo_id = B.Foo_id AND B.Bar_staus != 'Yes'
WHERE B.Foo_id IS NOT NULL
答案不应包含子查询
答案 0 :(得分:0)
仅加入是行,然后只保留那些找不到匹配项的行:
select F.Foo_id, F.Foo_Name
from
Foo F left outer join Bar B
on F.Foo_id = B.Foo_id and B.Bar_status = 'Yes'
where B.Foo_id is null
@sgeddes在评论中描述了这个答案,但也许并不清楚如何实施该建议。如果B中可能有多个是值,那么您需要添加distinct
。