tableAとtableBの2つのテーブルがあります。tableAにはあるがtableBにはないすべてのレコードを取得するにはどうすればよいですか?回避策ではなく、これを行うための適切な方法に興味があります。左結合を使用してからを追加してみましたwhere ID is not null
。それは機能しますが、それが正しい方法かどうかはわかりません。
5 に答える
select * from tableA
where id not in (select id from tableB)
また
select * from tableA a
left join tableB b on a.id = b.id
where b.id is null
どちらも、あなたが尋ねたものを取得するための完全に許容できる方法です。
テーブルスキーマを指定していないので、各テーブルに主キーがあると仮定します。id1、id2
あなたは左の参加の助けを借りて行うことができます。
id2がnullであるtable1leftjointable2から*を選択します
注:これは実際のクエリではなく、先に進むためのヒントにすぎません。
ページにデータを表示する必要がある場合(プログラミング)、これには結合を使用する必要があります。バックアップまたは他の同様の目的でデータをあるテーブルから別のテーブルに移動する必要がある場合は、SQL比較ツールが必要です。最初に、SQL左結合が必要です。テーブルAを左のテーブルにして、Bに入れて結合します
select * from A
left join B on A.id = B.id
where b.id is null
を使用できますNOT EXISTS
。NOT EXISTS
列がnullを許可しているが、nullがない場合、NOT IN
パフォーマンスは。よりも大幅に低下するため、使用することをお勧めしますNOT EXISTS
。
Select * from table1 a
Where not exists (Select ID from table2 b where a.ID = b.ID)
列では、とNOT EXISTSの動作とパフォーマンスが同じでnon-nullable
あるため、状況に合ったいずれかを使用できます。NOT IN
SQLフィドル[][1]
デモ http://www.sqlfiddle.com/#!3/10300/2
select * from table1 where id not in(select id from table2)