• ベストアンサー

コードを置き換えるSQLの書き方

いつもお世話になっております。 以下(1)(2)テーブルありますが、これを(3)のようにSELECTしてくるようにするにはSQLをどう書けばよろしいんでしょうか。お願いします。 (1)料理コードテーブル 1,ピラフ 2,チャーハン 3,天ぷら 4,カレー (2)献立テーブル 一月,1,2,3,4,1,2,3,4, (3)一月,ピラフ,チャーハン,天ぷら,カレー,ピラフ,チャーハン,天ぷら,カレー

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

  • ベストアンサー
  • nonghao
  • ベストアンサー率100% (1/1)
回答No.4

SELECT t.月名,r1.料理名,r2.料理名,r3.料理名,r4.料理名,r5.料理名,r6.料理名,r7.料理名,r8.料理名 FROM (((((((献立テーブル t left JOIN 料理コードテーブル r1 ON r1.コード=t.[1日]) left JOIN 料理コードテーブル r2 ON r2.コード=t.[2日]) left JOIN 料理コードテーブル r3 ON r3.コード=t.[3日]) left JOIN 料理コードテーブル r4 ON r4.コード=t.[4日]) left JOIN 料理コードテーブル r5 ON r5.コード=t.[5日]) left JOIN 料理コードテーブル r6 ON r6.コード=t.[6日]) left JOIN 料理コードテーブル r7 ON r7.コード=t.[7日]) left JOIN 料理コードテーブル r8 ON r8.コード=t.[8日]

noname#147912
質問者

補足

ありがとうございます。大変助かりました。

その他の回答 (3)

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.3

例は8日までですが、実際は31日まであるんですよね? No2さんのいわれる通り、テーブルのストラクチャを変更できるならば、するに越したことは ありません。 そのテーブル構造では、整合性保持や検索効率・レスポンス向上といったDBMSのメリットを 一切享受することができません。 もし質問者さんがテーブルのストラクチャを変更する権限をもっておられないならば、 クエリは以下の方法で書かざるを得ません。 SELECT t.月名,r1.料理名,r2.料理名,r3.料理名,r4.料理名,r5.料理名,r6.料理名,r7.料理名,r8.料理名 FROM 献立テーブル t INNER JOIN 料理コードテーブル r1 ON r1.コード=t.[1日] INNER JOIN 料理コードテーブル r1 ON r1.コード=t.[2日] INNER JOIN 料理コードテーブル r1 ON r1.コード=t.[3日] INNER JOIN 料理コードテーブル r1 ON r1.コード=t.[4日] INNER JOIN 料理コードテーブル r1 ON r1.コード=t.[5日] INNER JOIN 料理コードテーブル r1 ON r1.コード=t.[6日] INNER JOIN 料理コードテーブル r1 ON r1.コード=t.[7日] INNER JOIN 料理コードテーブル r1 ON r1.コード=t.[8日] なお、SQL Serverでは、以下のクエリでも同じ実行プランを組みます。 SELECT t.月名, (SELECT 料理名 FROM 料理コードテーブル WHERE コード=t.[1日]), (SELECT 料理名 FROM 料理コードテーブル WHERE コード=t.[2日]), (SELECT 料理名 FROM 料理コードテーブル WHERE コード=t.[3日]), (SELECT 料理名 FROM 料理コードテーブル WHERE コード=t.[4日]), (SELECT 料理名 FROM 料理コードテーブル WHERE コード=t.[5日]), (SELECT 料理名 FROM 料理コードテーブル WHERE コード=t.[6日]), (SELECT 料理名 FROM 料理コードテーブル WHERE コード=t.[7日]), (SELECT 料理名 FROM 料理コードテーブル WHERE コード=t.[8日]) FROM 献立テーブル t

noname#147912
質問者

補足

詳しい説明、大変勉強になりました。今後こういったテーブルに気をつけます。ありがとうございました。

noname#140971
noname#140971
回答No.2

幾らなんでもテーブル設計の是正が先決だと思いますよ。 料理コードテーブル: ~~~~~~~~~~~~~~~~~~~~~~~~~~~ コード,料理名 1,ピラフ 2,チャーハン 3,天ぷら 4,カレー 献立テーブル ~~~~~~~~~~~~~~~~~~~~~~~~~~~ 月名,日付,料理コード 一月,1,1 一月,2,2 一月,3,3 一月,4,4 一月,5,1 一月,6,2 一月,7,3 こんな感じでないと、どうしようもなくなると思いますが・・・。

noname#147912
質問者

補足

会社のテーブルでしたので、ちょっと変更は・・・今後はこういう合理性のないテーブルを設計しないように気をつけます。ありがとうございます。

  • LegaC2
  • ベストアンサー率52% (224/428)
回答No.1

料理コードテーブル、献立テーブルのそれぞれのカラム名(列名)を教えてください。

noname#147912
質問者

補足

申し訳ありません。 (1)料理コードテーブル コード,料理名 1,ピラフ 2,チャーハン 3,天ぷら 4,カレー (2)献立テーブル 月名,1日,2日,3日,4日,5日,6日,7日,8日 一月,1,2,3,4,1,2,3,4 です。お願いいたします。