2017-02-16 6 views
0

私はそれぞれ10mil以上のレコードを持つ2つの大きなテーブルを持っています。私はテーブルのどれが欠けているかを調べようとしています。テーブルの同一のスキーマを持っており、このよう2つの大きなテーブルで複数の行を比較する

を見て表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

以下のような非一致する行を取得するには、T1からtable2ので合流左Applyを1 – Strawberry

+0

@Strawberry私はtable2から抜けている行だけに興味があります –

答えて

2

あなたが行のみ表2から欠落している、あるいはまた、表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の列の1つがnullであることをテストする必要があります – Bohemian

+0

ColA、ColB、ColCにインデックスがあるのにクエリが終了する前に終了します –

関連する問題