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