2017-02-16 345 views
0

我有兩個大表,每個表中有超過10mil的記錄。我試圖找出其中一個表的缺失值。該表具有相同的架構和看起來像這樣比較兩個大表中的多行

表1

| ColA  | ColB  | ColC   | 
|:-----------|------------:|:------------:| 
| John  | Steve  | Richardson | 
| Steve  | Richard  | Johnson  | 
| Will  | Jack  | Jackson  | 

表2

| ColA  | ColB  | ColC   | 
|:-----------|------------:|:------------:| 
| John  | Steve  | Richardson | 
| Will  | Jack  | Jackson  | 

我要找的史蒂夫·理查德·約翰遜記錄

我嘗試以下查詢,但超時

SELECT * 
FROM `Table1` AS a 
WHERE NOT EXISTS 
(SELECT * FROM `Table2` AS b WHERE 
`a`.`ColA` = `b`.`ColA` AND `a`.`ColB` = `b`.`ColB` AND `a`.`ColC` = `b`.`ColC`) 
+0

您是否有興趣在該行從表2只,或還缺少哪些行存在於表2,但是從表中缺少1 – Strawberry

+0

@Strawberry我只對錶2中缺少的行感興趣 –

回答

2

申請左側與從T1表2加入,以獲得非匹配的行如下

select t1.* 
from table1 t1 
left join Table2 t2 on t1.col1A = t2.colA and t1.colB = t2.colB and t1.colC = t2.colC 
where t2.colA is null and t2.cOlB is null and t2.colC is null 
+0

您只需要測試t2中的一列爲空 – Bohemian

+0

即使在ColA,ColB和ColC上有索引時,查詢也會超時 –