用于检查SQL Server中组中是否存在确切ID的逻辑

Cod*_*bie 8 sql sql-server sql-server-2008

我有一些样本数据,如:

INSERT INTO mytable ([ID], [FK_ID], [TYPE_ID])
VALUES
    (1, 10, 1),
    (2, 11, 1), (3, 11, 2),    
    (4, 12, 1), (5, 12, 2), (6, 12, 3),
    (7, 14, 2), (8, 14, 3)
Run Code Online (Sandbox Code Playgroud)

现在,我在这里尝试检查每组中FK_ID是否有完全匹配的TYPE_ID1 & 2.

所以,预期的输出是这样的:

  1. (1, 10, 1) 这应该失败
    • 在集团中FK_ID = 10我们只有一条记录
  2. (2, 11, 1), (3, 11, 2) 这应该通过
    • 在组中FK_ID = 11我们有两个记录.
    • 两者TYPE_ID都是匹配的1 & 2值.
  3. (4, 12, 1), (5, 12, 2), (6, 12, 3) 这也应该失败
    • 我们这里有3条记录.
  4. (7, 14, 2), (8, 14, 3) 这也应该失败
    • 即使我们有两个确切的记录,它也应该失败,因为TYPE_ID这里没有与1 & 2值匹配.

这是我的尝试:

select * 
from mytable t1
where exists (select count(t2.TYPE_ID) 
              from mytable t2 
              where t2.FK_ID = t1.FK_ID
                and t2.TYPE_ID in (1, 2)
              group by t2.FK_ID 
              having count(t2.TYPE_ID) = 2);
Run Code Online (Sandbox Code Playgroud)

这没有按预期工作,因为它也传递了FK_ID = 12三个记录.

演示:SQL小提琴

Nen*_*vic 2

可能有几种不同的方法可以做到这一点。其中之一可能是:

SELECT FK_ID 
FROM mytable
GROUP BY FK_ID
HAVING COUNT(*) = 2
AND MIN(TYPE_ID) = 1
AND MAX(TYPE_ID) = 2
Run Code Online (Sandbox Code Playgroud)