如何解决从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而仅WFID为12或17时获取数据。在这种情况下,编号1的ID为12,但编号也为13和15,因此排除在外。包括编号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
。另外,在DISTINCT
中引用的子查询中也不需要使用EXISTS
。实际上,您甚至不需要真正引用一列。
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
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。