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_ID值1 & 2.
所以,预期的输出是这样的:
(1, 10, 1) 这应该失败
FK_ID = 10我们只有一条记录(2, 11, 1), (3, 11, 2) 这应该通过
FK_ID = 11我们有两个记录.TYPE_ID都是匹配的1 & 2值.(4, 12, 1), (5, 12, 2), (6, 12, 3) 这也应该失败
(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小提琴
可能有几种不同的方法可以做到这一点。其中之一可能是:
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)