• 締切済み

外部結合で参照列が複数あるSQL

テーブルA ID 依頼者  代理者 1 0001    0002 2 0001   0005 3 0004   0003 テーブルB 従業員ID 名前 0001   佐藤 0002   中村 0003   林 0004   高橋 0005   田中 このとき、テーブルAを素にして外部結合して 依頼者番号の欄には名前を入れるSQLを作りたいと思います。 外部結合をSQLで SELECT 依頼者,代理者 FROM テーブルA LEFT JOIN テーブルB ON テーブルA.依頼者 = テーブルB.従業員ID と行い、『依頼者』については、テーブルBから名前を引っ張ってこれたのですが、『代理者』列についても、テーブルBから名前を引っ張ってこれるようにしたいと思います。 色々試しましたが、分かりません。 お知恵をお貸しいただけると、嬉しいです。 どうぞ、よろしくお願いします。

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

なぜPHPの質問? 別名をつければいけませんか? SELECT 依頼者,B1.名前 AS 依頼者名,代理者,B2.名前 AS 代理者名 FROM テーブルA AS A LEFT JOIN テーブルB AS B1 ON A.依頼者 = B1.従業員ID LEFT JOIN テーブルB AS B2 ON A.依頼者 = B2.従業員ID

weterlily
質問者

お礼

すみません、説明不足でした。 SQLで抽出したものをPHPで表示させるようにしてます。 SQLの質問というカテゴリが無かったような気がしたので すみません。 アドバイスありがとうございます! 別名ですね。早速やってみます!

weterlily
質問者

補足

↓下記のお礼後、早速別名をつけて行ったところうまく行きました! テーブルの別名で『AS』をつけるとうまくいかず…代わりにブランク を空けてあげるとうまく行きました。(データベースによって変わるのかな?) 親切な回答とても感謝しています。 ありがとうございました。

回答No.1

2重に外部結合ではいかがでしょうか? 対応のDBによっては直接出来ないかも知れませんが、 SELECT 依頼者, 名前, 代理者, 名前 FROM ( SELECT 依頼者,代理者 FROM テーブルA LEFT JOIN テーブルB ON テーブルA.依頼者 = テーブルB.従業員ID ) テーブルC JOIN テーブルB ON テーブルC.代理者 = テーブルB.従業員 と言うような。 もっとスマートの解決法があれば、私も知りたいところです。

weterlily
質問者

お礼

二重に外部結合は試して色々模索したのですが うまく行きませんでした。 ですが、kuma_vi_maさんが書いてくれた例はまだ行ってませんので やってみます! ありがとうございます!