MySQLでJOINに該当しないデータを取得するには、LEFT JOIN もしくは RIGHT JOIN と WHERE句 を組み合わせて実現できます。
LEFT JOINを使用する例
たとえば、TableA
と TableB
という2つのテーブルがあり、TableA
には id
列があり、TableB
にも同じ id
列があるとします。この2つのテーブルで TableB
に一致しない TableA
のレコードだけを取得したい場合は、以下のようにします。
SELECT TableA.*
FROM TableA
LEFT JOIN TableB ON TableA.id = TableB.id
WHERE TableB.id IS NULL;
解説
- LEFT JOIN は、
TableA
にあるすべてのデータを取得し、TableB
の対応するデータがあればそれも一緒に取得しますが、なければNULLを返します。 WHERE TableB.id IS NULL
を指定することで、TableB
に該当しない(NULLになっている)TableA
のデータだけを選択できます。
RIGHT JOINを使用する場合
TableB
のデータが基準で、TableA
に一致しないデータを取得したい場合は、RIGHT JOIN
を使います。
SELECT TableB.*
FROM TableA
RIGHT JOIN TableB ON TableA.id = TableB.id
WHERE TableA.id IS NULL;
同じロジックで、TableA
に一致しない TableB
のレコードだけを取得します。
この方法で、JOINに該当しないデータを効率的に取得することができます。