1. ホーム
  2. sql

[解決済み] 別のテーブルに一致する項目がない行を選択するにはどうすればよいですか?

2022-03-22 23:59:54

質問

あるデータベース・アプリケーションのメンテナンスをしていて、嬉しいことに、あるテーブルの値が外部キーのスタイルで使用されているにもかかわらず、そのテーブルには外部キー制約がないことを発見したんだ。

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

この種のクエリの例をいくつかウェブで見つけたのですが、どれも説明というより例を示しているようで、なぜうまくいくのか理解できません。

他のテーブルにマッチしない行をすべて返すクエリの作成方法とその内容について、どなたか説明していただけませんか。 ごちゃごちゃ FK制約を持たないもの?

解決方法は?

簡単なクエリを紹介します。

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

重要なポイントは

  1. LEFT JOIN のすべての行を返します。 Table1 に一致する行があるかどうかに関係なく、その行は Table2 .

  2. WHERE t2.ID IS NULL この句は、返される結果を、ID が Table2 がヌルである場合、言い換えれば NO のレコードを Table2 から、その特定の ID に対して Table1 . Table2.ID からのすべてのレコードに対してNULLを返します。 Table1 でIDが一致しない場合、そのIDは Table2 .