2017-08-07 89 views
0

我有许多列的表格。每个代表它所代表的数据的特定“场景”。看起来像这样:获取名称是第二个查询结果的列的值

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

我有另一个表,存储实体和一列,我存储这entitiy的默认场景。看起来是这样的:

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

我想从第二个表中获取结果,并从第一个表返回值,根据该行的default_scenario是什么,作为结果的额外的列。

我在想这可以通过JOIN来完成,但是如何在不使用PHP的情况下在同一个查询中使用一行的值作为另一个列的名称?

这甚至可能吗?

编辑:

查询我试图让将返回此:

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

不,这不可能在一个查询。你可以做的最好的是:

  • 使用两个查询
  • 第一个查询结果得到的列名
  • 动态生成基于这些列名

但是,如果你能第二次查询改变数据库设计,我会建议将scenarios提取出来,并在第一个表中添加scenario_id而不是使用不同的列,即:

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

这会使查询变慢吗?我问的唯一理由是因为我有大约70,000个不同的实体,每个实体都有63种不同的场景。这将在表中产生〜4,410,000行(根据您建议的设计)。这些数据也每年增加约650.000次。从长远来看,行可能会达到1bil + – eeetee

+0

看看[this](https://stackoverflow.com/questions/4988915/mysql-creating-rows-vs-columns-performance)所以回答。通过上述设计,它将被标准化并且易于查询(在现有设计中,如果您想要添加20个以上的场景,您最终会创建20个新列,从长远来看很难维护)。 –

+0

具有很多意义。感谢您的帮助和建议。 – eeetee

相关问题