• ベストアンサー

デーブルのリンクについて

select文で2つのテーブルをリンクし表示したいのですが,うまくできません. 具体的には, 「ユーザテーブル」 ・ID ・名前 「タスクテーブル」 ・タスクID ・タスク名 ・ユーザID1 ・ユーザID2 ・ユーザID3 という二つのテーブル構成になっています. タスクテーブルのユーザID1~3は,ユーザテーブル のIDとリンクしています. この状況で,タスクテーブルのユーザID1~3を ユーザテーブルのIDとリンクさせ,名前を表示する クエリを作成したいのです. 「タスクテーブルクエリ」 ・タスクID ・タスク名 ・ユーザ名前1(ユーザテーブルのIDとリンク) ・ユーザ名前2(ユーザテーブルのIDとリンク) ・ユーザ名前3(ユーザテーブルのIDとリンク) このようにするにはどうすればよいでしょうか? すみませんが,教えて下さい.

質問者が選んだベストアンサー

  • ベストアンサー
  • usa_usako
  • ベストアンサー率40% (14/35)
回答No.2

私は普段はDB2しか使ったことがないのでMySQLでサポートされているかわかりませんが。 こんな感じでどうでしょうか? また、テスト環境もないので間違ってたらごめんなさい。。。 SELECT A.タスクID,A.タスク名,B.名前,C.名前,D.名前 FROM ( SELECT タスクID,タスク名 FROM タスクテーブル ) AS A LEFT JOIN ( SELECT タスクテーブル.タスクID,ユーザーテーブル.名前 FROM タスクテーブル,ユーザーテーブル WHERE タスクテーブル.ユーザーID1 = ユーザーテーブル.ID ) AS B ON (A.タスクID = B.タスクID) LEFT JOIN ( SELECT タスクテーブル.タスクID,ユーザーテーブル.名前 FROM タスクテーブル,ユーザーテーブル WHERE タスクテーブル.ユーザーID2 = ユーザーテーブル.ID ) AS C ON (A.タスクID = C.タスクID) LEFT JOIN ( SELECT タスクテーブル.タスクID,ユーザーテーブル.名前 FROM タスクテーブル,ユーザーテーブル WHERE タスクテーブル.ユーザーID3 = ユーザーテーブル.ID ) AS D ON (A.タスクID = D.タスクID) また、ユーザーID1に必ずユーザーテーブル.IDにリンクするものが入っていることが前提ならばAの部分は不要です。 こんな感じになると思います。。。 SELECT B.タスクID,B.タスク名,B.名前,C.名前,D.名前 FROM ( SELECT タスクテーブル.タスクID,タスクテーブル.タスク名,ユーザーテーブル.名前 FROM タスクテーブル,ユーザーテーブル WHERE タスクテーブル.ユーザーID1 = ユーザーテーブル.ID ) AS B LEFT JOIN ( SELECT タスクテーブル.タスクID,ユーザーテーブル.名前 FROM タスクテーブル,ユーザーテーブル WHERE タスクテーブル.ユーザーID2 = ユーザーテーブル.ID ) AS C ON (B.タスクID = C.タスクID) LEFT JOIN ( SELECT タスクテーブル.タスクID,ユーザーテーブル.名前 FROM タスクテーブル,ユーザーテーブル WHERE タスクテーブル.ユーザーID3 = ユーザーテーブル.ID ) AS D ON (B.タスクID = D.タスクID)

yabetty
質問者

お礼

ありがとうございます! 左結合+サブクエリを使うのですか・・ 初心者なもので,なかなか思いつきませんでした. 参考になりました!

その他の回答 (1)

  • Dpop
  • ベストアンサー率51% (279/544)
回答No.1

サブクエリ(副問い合わせ)を使いましょう。 SQLの解説書かWebでサブクエリ(副問い合わせ)を調べてみてください。使い方が分かると思います。

yabetty
質問者

お礼

ありがとうございます! サブクエリを使うのですね・・・ 初心者なもので,なかなか思いつきませんでした. 参考になりました.

関連するQ&A