あるテーブルから、別のテーブルに存在しないすべてのレコードを選択するにはどうすればよいでしょうか? 質問する

あるテーブルから、別のテーブルに存在しないすべてのレコードを選択するにはどうすればよいでしょうか? 質問する

テーブル1 (ID、名前)
テーブル2 (ID、名前)

クエリ:

SELECT name   
FROM table2  
-- that are not in table1 already

ベストアンサー1

SELECT t1.name
FROM table1 t1
LEFT JOIN table2 t2 ON t2.name = t1.name
WHERE t2.name IS NULL

Q : ここで何が起こっているのですか?

A : 概念的には、 からすべての行を選択し、各行について、 の列に同じ値を持つtable1行を見つけようとします。そのような行がない場合は、結果のその行の部分を空のままにします。次に、一致する行が存在しない結果の行のみを選択することで、選択を制限します。最後に、列 ( から確実に存在する列)を除く結果のすべてのフィールドを無視します。table2nametable2nametable1

これはすべてのケースで最もパフォーマンスの高い方法ではないかもしれませんが、実装を試みるすべてのデータベースエンジンで基本的に機能するはずです。ANSI 92SQL

おすすめ記事