2016-12-29 231 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