- ベストアンサー
同じ項目よりデータを取得する
はじめまして。 初心者でまだよく理解できていないのですが、 よろしくお願いします。 教えていただきたいことは テーブル 受講履歴 出席番号 氏名 教科1 教科2 教科3 ――――――――――――――――――― 1001 山田 2 3 5 1002 武田 4 2 1003 斎藤 5 1 1004 山本 5 3 2 1005 鈴木 3 1 テーブル 教科 教科ID 教科名 ――――――― 1 国語 2 数学 3 理科 4 社会 5 音楽 といったテーブルがあったときに、出席番号を指定すると 氏名、教科1、教科2、教科3を取得するSQLを教えて頂きたいです。 たとえば出席番号1002にした場合、 氏名 教科1 教科2 教科3 ―――――――――――――― 武田 社会 数学 といった感じです。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
素直にジョインすると以下のようになります。 select a.氏名, b.教科名 AS 教科1, c.教科名 AS 教科2, d.教科名 AS 教科3, from 受講履歴 a left join 教科 AS b on a.教科1 = b.教科ID left join 教科 AS c on a.教科2 = c.教科ID left join 教科 AS d on a.教科3 = d.教科ID where a.出席番号 = 1002 ; でも、普通に考えて「受講履歴」の教科カラムが3つだけとは思えないのです。教科を横持ちにするとカラム数分しか履歴はもてないのでは? 実際のテーブル構造は違うと思いますので参考までに。
その他の回答 (1)
- nora1962
- ベストアンサー率60% (431/717)
select a.氏名 ,(select b.教科名 from 教科 b where a.教科1=b.教科ID ) as 教科1 ,(select c.教科名 from 教科 c where a.教科1=c.教科ID ) as 教科2 ,(select d.教科名 from 教科 d where a.教科1=d.教科ID ) as 教科3 from 受講履歴 a where a.出席番号 = 1002 こんなのでいいですか?
お礼
お礼が遅れました。 ありがとうございました。 お陰さまで実現することができました。 また、よろしくお願いします。
お礼
回答ありがとうございました。 大変参考になりました。 おっしゃる通りですね(^ ^;) もうちょっと調べてみることにします。 またよろしくお願いしますm(_ _)m