- ベストアンサー
デーブルのリンクについて
select文で2つのテーブルをリンクし表示したいのですが,うまくできません. 具体的には, 「ユーザテーブル」 ・ID ・名前 「タスクテーブル」 ・タスクID ・タスク名 ・ユーザID1 ・ユーザID2 ・ユーザID3 という二つのテーブル構成になっています. タスクテーブルのユーザID1~3は,ユーザテーブル のIDとリンクしています. この状況で,タスクテーブルのユーザID1~3を ユーザテーブルのIDとリンクさせ,名前を表示する クエリを作成したいのです. 「タスクテーブルクエリ」 ・タスクID ・タスク名 ・ユーザ名前1(ユーザテーブルのIDとリンク) ・ユーザ名前2(ユーザテーブルのIDとリンク) ・ユーザ名前3(ユーザテーブルのIDとリンク) このようにするにはどうすればよいでしょうか? すみませんが,教えて下さい.
- みんなの回答 (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)
その他の回答 (1)
- Dpop
- ベストアンサー率51% (279/544)
サブクエリ(副問い合わせ)を使いましょう。 SQLの解説書かWebでサブクエリ(副問い合わせ)を調べてみてください。使い方が分かると思います。
お礼
ありがとうございます! サブクエリを使うのですね・・・ 初心者なもので,なかなか思いつきませんでした. 参考になりました.
お礼
ありがとうございます! 左結合+サブクエリを使うのですか・・ 初心者なもので,なかなか思いつきませんでした. 参考になりました!