2017-08-07 14 views
0

私は多くの列を持つテーブルを持っています。それぞれは、それが表すデータの特定の「シナリオ」を表します。名前が2番目のクエリの結果である列の値を取得

id | col1 | col2 | col3 | col4 | col5  
---+--------+--------+--------+---------+--------- 
1 | 1200 | 100 | 1200 | 10000 | 1300 
2 | 100 | 1400 | 2300 | 1200 | 900  
3 | 3300 | 1200 | 400 | 600  | 12000 

エンティティを格納する別のテーブルと、このエンティティのデフォルトシナリオを格納する列があります。次のようになります。

id | city  | state | default_scenario 
---+------------+-------+------------------- 
1 | Miami  | FL | col3 
2 | Detroit | MI | col2 
3 | New York | NY | col1 
私は結果に余分な列として、行の default_scenarioが何であるかに応じて、第二のテーブルから結果を取得し、最初のテーブルから値を返すしたいと思います

これはJOINで行うことができますが、PHPを使用せずに同じクエリで別の列名として行の値を使用するにはどうすればよいですか?

これも可能ですか?

EDIT:

私が作るしようとしているクエリは、これを返します:

id | city  | state | default_scenario | scenario_data 
---+------------+-------+------------------+--------------- 
1 | Miami  | FL | col3    | 1200 
2 | Detroit | MI | col2    | 1400 
3 | New York | NY | col1    | 3300 
+0

あなたはSQLで直接操作することはできません。あなたはdinamic sql(サーバー側で生成されたSQLコード)を使用する必要があります – scaisEdge

答えて

0

いいえ、それは1つのクエリではできません。あなたができる最善のは、次のとおりです。

  • 使用の2つのクエリが
  • 最初のクエリ結果から列名を取得します
  • 動的にすることができます場合は、

しかし、これらのカラム名に基づいて第2のクエリを生成しますdbデザインを変更する場合は、別のテーブルにscenariosを抽出し、最初のテーブルにscenario_idを追加することをお勧めします。

id | scenario_id | value 
1 |  3  | 1200 
2 |  2  | 1400 
+0

これによりクエリが遅くなりますか?私が求めているのは、70,000の異なるエンティティがあり、それぞれ63のシナリオがあるからです。そうすれば、テーブル内に~410万行が表示されます(あなたが提案しているデザインの下に)。このデータも毎年約2回、約650.000増加しています。長期的には、行は1bil + – eeetee

+0

に達する可能性があります。[this](https://stackoverflow.com/questions/4988915/mysql-creating-rows-vs-columns-performance)SOの答えをご覧ください。上記の設計では、それは正規化され、照会が容易になります(既存の設計では、20個のシナリオを追加したい場合は、長期的には維持することが難しい20個の新しい列を作成することになります)。 –

+0

多くの意味があります。あなたの助けと提案に感謝します。 – eeetee

関連する問題