2016-12-29 187 views
1

我有这样的一个表:比较列表SQL查询

table t1{ida,idb,idc} 

和我的记录TABLETYPE变量列表

table t2{idb,idc} 

现在,我要检查不存在任何同所有的t2其中组由我IDA

+4

请提供一些示例数据和预期输出来澄清 – GurV

+3

Plus标记数据库您正在使用的问题 – GurV

+0

我有一个表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

回答

1

尝试它采用inner join找到表t1t2匹配的行,并显示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) 
+0

坦克,最后一行是什么意思? – user2830448

+0

这不起作用:'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' –

+0

@ user2830448最后一行比较't1.ida'每个值的表't1(idb,idc)'和't2(idb,idc)'之间匹配对的数量 –

1

好像你组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) 
+0

这是正确的,但是这种查询很多选择昂贵的原因? – user2830448