• ベストアンサー

同じ項目よりデータを取得する

はじめまして。 初心者でまだよく理解できていないのですが、 よろしくお願いします。 教えていただきたいことは テーブル 受講履歴 出席番号 氏名 教科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 ――――――――――――――  武田  社会  数学 といった感じです。 よろしくお願いします。

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

  • ベストアンサー
  • 3rd_001
  • ベストアンサー率66% (115/174)
回答No.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つだけとは思えないのです。教科を横持ちにするとカラム数分しか履歴はもてないのでは? 実際のテーブル構造は違うと思いますので参考までに。

dodory
質問者

お礼

回答ありがとうございました。 大変参考になりました。 おっしゃる通りですね(^ ^;) もうちょっと調べてみることにします。 またよろしくお願いしますm(_ _)m

その他の回答 (1)

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.1

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 こんなのでいいですか?

dodory
質問者

お礼

お礼が遅れました。 ありがとうございました。 お陰さまで実現することができました。 また、よろしくお願いします。

関連するQ&A