2017-08-07 59 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

相關問題