从条件 sql 中排除某些结果
Exclude certain results from in condition in sql
我有两张桌子
Table 1
Id data1 data1
1 'ff' 'ffe'
2 'r' '3'
3 'df' 'er'
Table 2
Id WFID data1 data2
1 12 'd' 'e'
1 13 '3' '4f'
1 15 'e' 'dd'
2 12 'f' 'ee'
3 17 'd' 'f'
现在我需要的是连接两个表并获取只有WFID为12或17的记录和12或17时的数据。在这种情况下,ID 号 1 有 12,但它也有 13 和 15,所以它被排除在外。包括 ID 号 2 和 3,因为它们只有 12 或 17。
我使用了以下查询,但它也为我提供了 ID 为 1 的数据。有人可以告诉我我可以用什么来解决这个问题。
select * from Table1
where Exists (select distinct ID from Table2 where
Table1.ID = Table2.ID and
WFID in (12,17))
谢谢
你想要一个 NOT EXISTS
和一个 NOT IN
。此外,不需要在 EXISTS
中引用的子查询中使用 DISTINCT
。你甚至不需要真正引用一个专栏。
SELECT *
FROM dbo.Table1 T1
WHERE NOT EXISTS (SELECT 1 from dbo.Table2 T2
WHERE T1.ID = T2.ID
AND WFID NOT IN (12,17));
您需要所有 ID,其中仅存在任何值 12 和 17,而没有其他值。
使用条件聚合:
select * from Table1
where ID in
(
select ID
from Table2
group by ID
having sum(case when WFID in (12,17) then 1 else -1000 end) > 0
)
我有两张桌子
Table 1
Id data1 data1
1 'ff' 'ffe'
2 'r' '3'
3 'df' 'er'
Table 2
Id WFID data1 data2
1 12 'd' 'e'
1 13 '3' '4f'
1 15 'e' 'dd'
2 12 'f' 'ee'
3 17 'd' 'f'
现在我需要的是连接两个表并获取只有WFID为12或17的记录和12或17时的数据。在这种情况下,ID 号 1 有 12,但它也有 13 和 15,所以它被排除在外。包括 ID 号 2 和 3,因为它们只有 12 或 17。
我使用了以下查询,但它也为我提供了 ID 为 1 的数据。有人可以告诉我我可以用什么来解决这个问题。
select * from Table1
where Exists (select distinct ID from Table2 where
Table1.ID = Table2.ID and
WFID in (12,17))
谢谢
你想要一个 NOT EXISTS
和一个 NOT IN
。此外,不需要在 EXISTS
中引用的子查询中使用 DISTINCT
。你甚至不需要真正引用一个专栏。
SELECT *
FROM dbo.Table1 T1
WHERE NOT EXISTS (SELECT 1 from dbo.Table2 T2
WHERE T1.ID = T2.ID
AND WFID NOT IN (12,17));
您需要所有 ID,其中仅存在任何值 12 和 17,而没有其他值。
使用条件聚合:
select * from Table1
where ID in
(
select ID
from Table2
group by ID
having sum(case when WFID in (12,17) then 1 else -1000 end) > 0
)