我有一些示例数据,如下:
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)
现在,我正在尝试检查每个
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)
这个也应该失败- 因为这里有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);
这并不像预期的那样工作,因为它也通过了
FK_ID = 12
,而它有三条记录。演示: SQL Fiddle