- ベストアンサー
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
- みんなの回答 (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)
- chukenkenkou
- ベストアンサー率43% (833/1926)
「課題の丸投げ」のような、質問の仕方はやめましょう。 ここの規約違反になり、削除さえる可能性があります よ? 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がいいと考えました。