需要sql查询以匹配三个值
我有一张像下面这样的桌子需要sql查询以匹配三个值,sql,sql-server,Sql,Sql Server,我有一张像下面这样的桌子 CAccountID CID NetworkID 1 1 1 2 1 2 3 2 1 4 2 2 5 2 3 6 3 1 7 3 2 8 3 3 9
CAccountID CID NetworkID
1 1 1
2 1 2
3 2 1
4 2 2
5 2 3
6 3 1
7 3 2
8 3 3
9 4 1
10 4 2
我需要一个查询来选择所有具有所有3个NetworkID 1,2,3的CID,而不需要只显示1和2个NetworkID
输出应如下所示
CAccountID CID NetworkID
3 2 1
4 2 2
5 2 3
6 3 1
7 3 2
8 3 3
您可以将GROUP BY与JOIN一起使用:
试试这个:
select * from my_table t
where exists(select 1 from my_table
where CID = t.CID and NetworkID in (1,2,3)
group by CID
having count(*) = 3)
select * from <<tablename>> where cid in(select cid from <<tablename>> group by cid having count(*)=3).
试试这个:
select * from my_table t
where exists(select 1 from my_table
where CID = t.CID and NetworkID in (1,2,3)
group by CID
having count(*) = 3)
select * from <<tablename>> where cid in(select cid from <<tablename>> group by cid having count(*)=3).
在这里,子查询将返回表中有3行的所有千个cid
或者,如果您有更多的网络ID,则使用INTERSECT运算符可能会有所帮助:
select * from <<tablename>> where cid in (
select cid from <<tablename>> where NetworkID=1
INTERSECT
select cid from <<tablename>> where NetworkID=2
INTERSECT
select cid from <<tablename>> where NetworkID=3
);
INTERSECT操作符基本上返回查询中的所有公共行。因此,您的数据不可预测性可以通过这种方式处理尝试xml路径
SELECT *
FROM Table_Name B
WHERE (SELECT [text()] = A.Network FROM Table_Name A WHERE A.CID = B.CID
ORDER BY CID, CAAccount FOR XML PATH('')) = 123
CTE演示:
; WITH CTE(CAAccount, CID, Network) AS
(
SELECT 1 , 1, 1 UNION ALL
SELECT 2 , 1, 2 UNION ALL
SELECT 3 , 2, 1 UNION ALL
SELECT 4 , 2, 2 UNION ALL
SELECT 5 , 2, 3 UNION ALL
SELECT 6 , 3, 1 UNION ALL
SELECT 7 , 3, 2 UNION ALL
SELECT 8 , 3, 3 UNION ALL
SELECT 9 , 4, 1 UNION ALL
SELECT 10, 4, 2
) SELECT *
FROM CTE B
WHERE (SELECT [text()] = A.Network FROM CTE A WHERE A.CID = B.CID ORDER BY CID, CAAccount FOR XML PATH('')) = 123
输出:
CAAccount CID Network
3 2 1
4 2 2
5 2 3
6 3 1
7 3 2
8 3 3
嗨,莎玛,谢谢你的回复。我需要所有1,2,3网络ID的CID。。请检查我期望的输出嗨,谢谢你的回复。我需要所有1,2,3网络ID的CID。。请检查输出iexpected@user2986417你试过我的问题吗?它应该返回您想要的结果。不要忘记,您可能应该指定1,2,3中的何处NetworkID,因为数据可能不可预测。1,2,3中的何处NetworkID可能对性能没有帮助。然而,我喜欢您对数据不可预测性的关注,因此,我添加了另一种方法:请提及您的sql server版本。。