微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从SQL条件中排除某些结果

如何解决从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 举报,一经查实,本站将立刻删除。