从条件 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
 )