• ベストアンサー

1つのテーブルに同じデータを参照する複数の列がある場合…

うまく説明できないのですが、 テーブル1   テーブル2 No|名前    ID|午前担当|午後担当 ――――  ―――――――――― 01|Aさん   01|     1|     2 02|Bさん   02|     3|     4 03|Cさん   03|     5|     1 04|Dさん   04|     2|     3 05|Eさん   05|     4|     5 上の2つのテーブルを結合させて、 結合後テーブル No|午前担当|午後担当 ―――――――――― 01|  Aさん|  Bさん 02|  Cさん|  Dさん 03|  Eさん|  Aさん 04|  Bさん|  Cさん 05|  Dさん|  Eさん 上のように表示させたいのですが、 どのように結合したらよいのでしょうか? どうぞ、ご教授よろしくお願いしますm(_ _)m

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

  • ベストアンサー
  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.2

>どのように結合したらよいのでしょうか? テーブル2に対してテーブル1を2つ結合させれば出来ます。 下記ではテーブル1を2回結合させるためテーブル1とテーブル1_1として結合させています。 SELECT テーブル2.ID, (テーブル1.名前) AS 午前担当, (テーブル1_1.名前) AS 午後担当 FROM (テーブル2 LEFT JOIN テーブル1 ON テーブル2.午前担当 = テーブル1.[No]) LEFT JOIN テーブル1 AS テーブル1_1 ON テーブル2.午後担当 = テーブル1_1.[No] ORDER BY テーブル2.ID; INNER JOINを使うとテーブル2の午前・午後担当フィールドにNullがあった場合表示されないのでLEFT JOINとしてNullの場合も表示させるよう対応しています。 Nullは絶対ないという場合ならLEFT JOINをINNER JOINとしても大丈夫です。 これで出来ます。

その他の回答 (1)

回答No.1

「課題の丸投げ」のような、質問の仕方はやめましょう。 ここの規約違反になり、削除さえる可能性があります よ? create table t1 (No smallint, namae varchar(1)); insert into t1 values(1,'A'); insert into t1 values(2,'B'); insert into t1 values(3,'C'); insert into t1 values(4,'D'); insert into t1 values(5,'E'); create table t2 (ID smallint, AM smallint, PM smallint); insert into t2 values(1,1,2); insert into t2 values(2,3,4); insert into t2 values(3,5,1); insert into t2 values(4,2,3); insert into t2 values(5,4,5); select x.ID,x.namae,y.namae from (select ID,namae from t2 left join t1 on AM=No) as x inner join (select ID,namae from t2 left join t1 on PM=No) as y on x.ID=y.ID; ※left joinのところは、inner joinでもいいのですが、「担当者を置かないこともある」と考えると、left joinがいいと考えました。

関連するQ&A