从sql中的in条件中排除某些结果
我有两张桌子从sql中的in条件中排除某些结果,sql,sql-server,sql-server-2012,Sql,Sql Server,Sql Server 2012,我有两张桌子 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' 现在我需要的是连接两个表,并在记录的WFI
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))
谢谢您想要的是不存在和不存在。此外,不需要在EXISTS中引用的子查询中使用DISTINCT。你甚至不需要引用真实的专栏
挑选*
来自dbo.table1t1
如果不存在,则从dbo.Table2 T2中选择1
其中T1.ID=T2.ID
WFID不在12,17;
您需要一个NOT EXISTS和一个NOT IN。此外,不需要在EXISTS中引用的子查询中使用DISTINCT。你甚至不需要引用真实的专栏
挑选*
来自dbo.table1t1
如果不存在,则从dbo.Table2 T2中选择1
其中T1.ID=T2.ID
WFID不在12,17;
您需要所有ID,其中仅存在值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
)