LEFT JOIN/RIGHT JOINにANDが使えることをよく忘れるのでメモ

テーブルは以下の通り。
ユーザは複数の部署に所属できる為、中間テーブルbelong_memberを設けている。

  • user(ユーザ情報テーブル
    • id
    • name
  • belong(所属部署テーブル)
    • id
    • name
  • belong_member(ユーザと所属部署を紐付け)
    • id__belong
    • id__user

取得したい結果

id(belong.id) name(belong.name) id__user(user.id)
1 営業 100
2 広報 null
3 開発 100

  • 部署をすべて取得
  • user.id=100のユーザが所属している部署にはuser.idを含める
  • user.id=100のユーザが所属している部署はnull
SELECT
belong.*,
belong_member.id__user
FROM belong
LEFT JOIN belong_member ON belong.id = belong_member.id__belong
AND       belong_member.id__user     = 100

セレクトボックスを動的生成する場合、予めチェックを入れるべき項目が分かるので便利。