LEFT JOIN を使用した存在しないデータの検索
SQL では、2 つのテーブルを比較し、1 つのテーブルに存在するデータを識別する必要が生じることがあります。しかし、もう一方はそうではありません。このシナリオは、欠落レコードをチェックするときによく発生します。
次のテーブルについて考えてみましょう:
TABLE1
id | name | address |
---|---|---|
1 | mm | 123 |
2 | nn | 143 |
TABLE2
name | age |
---|---|
mm | 6 |
oo | 9 |
目的は、 TABLE1 と TABLE2 を比較して、TABLE1 に存在しない名前を検出します。この場合、TABLE1 の "nn" という名前の 2 行目は TABLE2 には存在しません。
INNER JOIN を使用した最初の試行:
SELECT w.* FROM TABLE1 w INNER JOIN TABLE2 v ON w.name <> v.name
は、目的の行を取得できません。 INNER JOIN は両方のテーブルに一致する行のみを返すため、結果が生じます。
解決策は LEFT JOIN を使用することです。代わりに:
SELECT w.* FROM TABLE1 w LEFT JOIN TABLE2 v ON w.name = v.name WHERE ISNULL(v.name);
LEFT JOIN は外部結合を実行します。つまり、右側のテーブル (TABLE2) に一致する行があるかどうかに関係なく、左側のテーブル (TABLE1) からすべての行が返されます。 ISNULL(v.name) 条件は、TABLE2 の対応する名前フィールドが null である TABLE1 内の行をチェックします。これは、名前が TABLE2 に存在しないことを示します。
出力は次のようになります。
id | name | address |
---|---|---|
2 | nn | 143 |
このクエリは、存在しない名前「nn」を持つ行を TABLE1 から正常に取得します。
以上がSQL の LEFT JOIN は、あるテーブルには存在するが別のテーブルには存在しないデータをどのように識別できるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。