加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 数据库 > MsSql > 正文

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

发布时间:2020-05-25 12:28:00 所属栏目:MsSql 来源:互联网
导读:我有一些样本数据,如: 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检查每

我有一些样本数据,如:

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

现在,我在这里尝试通过FK_ID检查每个组中是否具有TYPE_ID值1和&的完全匹配. 2.

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

>(1,1)这应该失败

>在FK_ID组中,我们只有一条记录

>(2,2)这应该通过

>在FK_ID组中,我们有两条记录.
>并且TYPE_ID都匹配1& 2个值.

>(4,3)这也应该失败

>因为我们在这里有3条记录.

>(7,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

解决方法

这可能有几种不同的方法.一个可能是:
SELECT FK_ID 
FROM mytable
GROUP BY FK_ID
HAVING COUNT(*) = 2
AND MIN(TYPE_ID) = 1
AND MAX(TYPE_ID) = 2

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读