追記
以下のようにも書けるようです。
SELECT
Users.name,
MAX(
CASE WHEN UserMails.mail_type = 0
THEN UserMails.mail_address
ELSE ''
END
) AS mail_address,
MAX(
CASE WHEN UserMails.mail_type = 1
THEN UserMails.mail_address
ELSE ''
END
) AS mobile_mail_address
FROM users Users
LEFT JOIN
user_mails UserMails
ON Users.id = UserMails.user_id
GROUP BY Users.id, Users.name
ORDER BY Users.id, Users.name
@asahina_dev さん、ありがとうございました。
以下、修正前の内容
例えばuser_mails
っていうテーブルにユーザーのメールアドレスが入ってて、
mail_type
カラムでPCとか携帯とかのタイプ分けがされているものを一緒にSELECTする場合
users テーブル
┌────┬───────┐
│ id │ name │
├────┼───────┤
│ 1 │ user1 │
└────┴───────┘
user_mails テーブル(mail_type = 0 がPC、 mail_type = 1 が携帯)
┌────┬─────────┬──────────────────┬───────────┐
│ id │ user_id │ mail_address │ mail_type │
├────┼─────────┼──────────────────┼───────────┤
│ 1 │ 1 │ hoge@example.com │ 0 │
├────┼─────────┼──────────────────┼───────────┤
│ 2 │ 1 │ fuga@example.com │ 1 │
└────┴─────────┴──────────────────┴───────────┘
SELECT
Users.name,
UserMails.mail_address,
UserMobileMails.mail_address AS mobile_mail_address
FROM users Users
LEFT JOIN
user_mails UserMails
ON Users.id = UserMails.user_id
AND UserMails.mail_type = 0
LEFT JOIN
user_mails UserMobileMails
ON Users.id = UserMobileMails.user_id
AND UserMobileMails.mail_type = 1
WHERE Users.id = 1
結果
┌───────┬──────────────────┬─────────────────────┐
│ name │ mail_address │ mobile_mail_address │
├───────┼──────────────────┼─────────────────────┤
│ user1 │ hoge@example.com │ fuga@example.com │
└───────┴──────────────────┴─────────────────────┘
って感じに複数JOINして別名を付けてあげるといいらしい。
ただメールアドレスがPC携帯の2種類、電話番号が自宅携帯会社の3種類とかあると
それだけで5回JOINすることになってしまう。
もうちょっと簡潔に書ける方法ってないのかな・・・