比较列表SQL查询
我有这样的一个表:比较列表SQL查询
table t1{ida,idb,idc}
和我的记录TABLETYPE变量列表
table t2{idb,idc}
现在,我要检查不存在任何同所有的t2
其中组由我IDA
尝试它采用inner join
找到表t1
和t2
匹配的行,并显示t1.ida
值以下查询其中有一个完全匹配
select a.ida
from t1 a inner join t2 b
on a.idb = b.idb and a.idc = b.idc
group by a.ida
having count(1) >= (select count(1) from t2)
坦克,最后一行是什么意思? – user2830448
这不起作用:'INSERT INTO @ T1 VALUES(1,1,1), (1,2,1), (1,3,2), (2,1,1), (2,2,1), (2,1,2)'和'INSERT INTO @ T2 VALUES(1,1), (2,1), (3,2), \t(4, 2)'。 并且您正在返回'1' –
@ user2830448最后一行比较't1.ida'每个值的表't1(idb,idc)'和't2(idb,idc)'之间匹配对的数量 –
好像你组t1
想是这样的:
DECLARE @t1 TABLE (ida INT, idb INT, idc INT)
DECLARE @t2 TABLE (idb INT, idc INT)
INSERT INTO @t1
VALUES (1, 1, 1),
(1, 2, 1),
(1, 3, 2),
(2, 1, 1),
(2, 2, 1),
(2, 1, 2)
INSERT INTO @t2
VALUES (1, 1),
(2, 1),
(3, 2)
SELECT DISTINCT
t1.ida
FROM @t1 t1
WHERE NOT EXISTS (SELECT *
FROM @t2 t2
WHERE NOT EXISTS (SELECT *
FROM @t1
WHERE ida = t1.ida
AND idb = t2.idb
AND idc = t2.idc))
AND NOT EXISTS (SELECT *
FROM @t1 tt1
WHERE ida = t1.ida
AND NOT EXISTS (SELECT *
FROM @t2
WHERE idb = tt1.idb
AND idc = tt1.idc))
输出:
ida
1
所以这仅返回ida
值其中有除同一比赛的数量的完全匹配。即下面将仍然匹配:
(1, 1, 1),
(1, 2, 1),
(1, 3, 2),
(1, 3, 2)
这是正确的,但是这种查询很多选择昂贵的原因? – user2830448
请提供一些示例数据和预期输出来澄清 – GurV
Plus标记数据库您正在使用的问题 – GurV
我有一个表t1(ida,idb,idc)例如与这些记录: (1,1,1),(1,2 ,1),(1,3,2),(2,1,1),(2,2,1),(2,1,2)(1,1),(2,1),(3,2) 在这个例子中,首先我想通过ida对t1组进行分组,然后检查t2 (1,(1,1),(2,1),(3.2)),(2,(1,1),(2,1),(1,2)) 存在于分组的t1, 中(1,(1,1),(2,1),(3.2)) – user2830448