読者です 読者をやめる 読者になる 読者になる

【MySQL】SELECT の フィールドに IN() を使って、レコードの存在を確認する

MySQL

存在の確認は EXISTS or NOT EXISTS を使うが、
「存在するものを取得」「存在しないものを取得」するだけで、
どれが存在してどれが存在するのかを一覧で取得することはできない。

別に case で書いてもいいんだけど、
今回は SELECT IN() を使う。
以下は全生徒が特定のクラスに含まれているかどうかを取得するSQL
なんとなく雰囲気を感じ取ってもらえれば・・・。

SELECT a.name, a.name IN (SELECT c.name FROM tb_class_student as c) FROM tb_all_student as a;

IN句のa.nameが 0 or 1 で返ってくる。

注意点としては、
a.nameにNULLが含まれている場合は、
テーブルフルスキャンが発生する。

テーブルにNOT NULLを付けておくといい。