2012-09-25 99 views
-1

我有一個表data_table,我已經在其上定義了一個主鍵作爲d_id和其他字段作爲f1到f25。 我還有一個表作爲fields_name上的字段名稱存儲值 F_ID,FIELD_NAME,順序mysql使用連接更改列名稱

我想用列名作爲存儲在fields_name表 我得到什麼f​​ield_values擺脫數據表中的所有數據,

f1 f2 f3 f4 
a b c d 

我想要什麼,

field_name1 field_name1 field_name1 field_name1 
a    b    c    d 

幫助appriciated .....

+1

你能至少試着拿出一個可能的查詢這使人們可以提出一個解決? – tadman

+0

+1如果您在http://sqlfiddle.com/ –

回答

0

這聽起來像你可能想要做這樣的事情:

select d_id, 
    max(case when field_name = 'Header' then value end) Header, 
    max(case when field_name = 'ID No.' then value end) ID_No, 
    max(case when field_name = 'Image' then value end) Image, 
    max(case when field_name = 'Name' then value end) Name 
from 
(
    select d_id, f1 value, 'f1' col 
    from data_table 
    union all 
    select d_id, f2 value, 'f2' col 
    from data_table 
    union all 
    select d_id, f3 value, 'f3' col 
    from data_table 
    union all 
    select d_id, f4 value, 'f4' col 
    from data_table 
) u 
inner join fields_name f 
    on u.col = f.a_flag 
group by d_id 

SQL Fiddle with Demo

+0

@ManeeshKumar給了我們一些東西在你對其他答案的評論後給予我們一些幫助,請參閱我的編輯。這聽起來就像是你在找什麼。 – Taryn

+0

出現錯誤爲「#1267 - 非法混合的排序規則(utf8_general_ci,COERCIBLE)和(latin1_swedish_ci,IMPLICIT)操作'='」 - 上面的2個子查詢正在工作,但我認爲錯誤是在上次連接中使用,嘗試但沒有得到解決。 @bluefeet –

+0

我的MySQL的版本5.5.16 –

0

我不明白......如果你要重命名的列名,你可以使用AS

SELECT f1 AS "field_name1", f2 AS "field_name2", f3 AS "field_name3" FROM table

編輯:

嘗試這樣:

SELECT f1,f2,f3,f4... FROM data_table LEFT JOIN data_table ON data_table.f1=(SELECT field_name FROM fields_names WHERE a_flag='f1') AND data_table.f2=(SELECT field_name FROM fields_names WHERE a_flag='f2')

+0

我想重命名列使用連接因爲我已經將列名稱存儲在另一個表中的值 我想要一個表,其中用戶可以在表中添加列,我已經在data_table中創建了n列,它將有一個連接時可訪問在field_name表中。 –

+0

我需要查看您的表結構,然後查看您已有的任何查詢 – h3rrmiller

+0

圖片:數據表結構>>>> http://www.freeimagehosting.net/mw77k Image:Data_table Values >>>> http:///www.freeimagehosting.net/veuk3 圖片:Fields_name結構和值>>>> http://www.freeimagehosting.net/v7fto –