別のテーブルに一致するエントリがない行を選択するにはどうすればいいですか? 質問する

別のテーブルに一致するエントリがない行を選択するにはどうすればいいですか? 質問する

私はデータベース アプリケーションのメンテナンス作業を行っていますが、嬉しいことに、あるテーブルの値が外部キーのスタイルで使用されているにもかかわらず、テーブルに外部キー制約がないことがわかりました。

これらの列に FK 制約を追加しようとしていますが、以前のエラーによって単純に修正された大量の不良データがすでにテーブルに存在するため、他のテーブルと一致しない行を見つけて削除する必要があることがわかりました。

この種のクエリの例を Web 上でいくつか見つけましたが、それらはすべて説明ではなく例を提供しているようで、なぜ機能するのか理解できません。

別のテーブルで一致しないすべての行を返すクエリの構築方法と、それが何をするのかを誰か説明してもらえますか。そうすれば、FK 制約のないこの混乱の中ですべてのテーブルに対して SO に駆け込むのではなく、自分でこれらのクエリを作成できます。

ベストアンサー1

簡単なクエリは次のとおりです。

SELECT t1.ID
FROM Table1 t1
    LEFT JOIN Table2 t2 ON t1.ID = t2.ID
WHERE t2.ID IS NULL

重要なポイントは次のとおりです。

  1. LEFT JOINTable1が使用されます。これにより、に一致する行があるかどうかに関係なく、のすべての行が返されますTable2

  2. WHERE t2.ID IS NULL。これにより、返される結果は、 から返された ID が null である行のみに制限されますTable2。つまり、からの特定の ID に対して にはレコードがありません。で ID が一致しないからのすべてのレコードに対して NULL が返されます。Table2Table1Table2.IDTable1Table2

おすすめ記事