• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:複数行の結果を一行でSELECTするには)

複数行の結果を一行でSELECTする方法

このQ&Aのポイント
  • 複数行の結果を一行でSELECTする方法について説明します。
  • 2つのテーブルからデータを取得する際、FKがstaff_idになります。
  • サブクエリやTOを使用して結果を取得する方法について説明します。

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

>サブクエリを使うのか?TOを使うのか、ググって何度か試したけども >いまいちわかりませんでした。 それはデータの持ち方が悪いからです。 普通はご提示のようなデータの持ち方にはなりません。 areaはおそらくvarchar型が妥当ですが、yearやpayはint型がよいでしょう それをvalueという枠に押し込めるのは賢明ではありません 正規化について学習をされたほうがよいでしょう。 ちなみに今回の例示で実現するなら以下のようにすると良いでしょう。 select s.staff_id,staff_name,staff_group ,v1.value as area ,v2.value as year ,v3.value as pay from staff_tbl as s left join value_tbl as v1 on s.staff_id=v1.staff_id and v1.value_name='area' left join value_tbl as v2 on s.staff_id=v2.staff_id and v2.value_name='year' left join value_tbl as v3 on s.staff_id=v3.staff_id and v3.value_name='pay' left join にするかinner joinにするかは仕様を検討してください

mareny
質問者

お礼

ありがとうございます。 早速試してみます。 >それはデータの持ち方が悪いからです。 >普通はご提示のようなデータの持ち方にはなりません。 >areaはおそらくvarchar型が妥当ですが、yearやpayはint型がよいでしょう >それをvalueという枠に押し込めるのは賢明ではありません >正規化について学習をされたほうがよいでしょう 確かにその通りなんですが、既存DBがすでに運用中で、変えようがないのです。。。 困ったものです(>_<)

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • nda23
  • ベストアンサー率54% (777/1416)
回答No.2

普通の結合でいいのでは? select A.staff_id,A.staff_name,A.staff_group ,B.value,C.value,D.value from ((staff_tbl A inner join staff_value B ON A.staff_id=B.staff_id AND B.value_name='area') inner join staff_value C ON A.staff_id=C.staff_id AND C.value_name='year') inner join staff_value D ON A.staff_id=D.staff_id AND D.value_name='pay'

mareny
質問者

お礼

ありがとうございます。 実は他にもいくつかのカラム、テーブルがあり そちらの方でINNER JOINを使うので精いっぱいでした。 なのでWHEREでいけるのかな?と勝手に思い込んでおりました。

すると、全ての回答が全文表示されます。

関連するQ&A