2013-02-20 211 views
1

有2个数据库表,如下所示Table_1 & Table_2。 Table_1列索引与table_2的id值匹配。 Table_2的名称值将作为查询结果的列标题。将SQL表头值与另一个表列值匹配

Table_1 
______________________________________________ 
| date  |city_1 | city_2 | ... | city_100 | 
|-----------|-------|-------------------------| 
| 20.02.2013| 4 | 34 | ... | 222 | 
| 21.02.2013| 3 | 10 | ... | 33 | 
| ... | ... | ... | ... | ... | 
|_____________________________________________| 


    Table_2 
___________________ 
| id | name | 
|-------|---------| 
| 1 | newyork | 
| 2 | london | 
| ... | ... | 
| 100 | istanbul| 
|_________________| 

预期结果低于

__________________________________________________________ 
    | date  | newyork | london | ... | istanbul | 
    |-----------|------------|------------|-------|-----------| 
    | 20.02.2013|  4  |  34  | ... | 222 | 
    | 21.02.2013|  3  |  10  | ... |  33 | 
    | ...  | ...  | ...  | ... | ... | 
    |___________|____________|____________|_______|___________| 

什么是SQL查询来获取引起上面?

感谢

回答

2

你可以使用一个解决方案是这样的:

SET @sql = NULL; 

SELECT GROUP_CONCAT(COALESCE(CONCAT(COLUMN_NAME, ' as ', Table_2.Name), COLUMN_NAME)) 
FROM 
    INFORMATION_SCHEMA.COLUMNS 
    LEFT JOIN Table_2 
    ON Table_2.ID = SUBSTRING_INDEX(COLUMN_NAME, '_', -1) 
WHERE table_name = 'Table_1' INTO @sql; 

SET @sql = CONCAT('SELECT ', @sql, ' FROM Table_1'); 

PREPARE stmt FROM @sql; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 

看到它here。 此代码将提取Table_1的所有列名称,并尝试将Table_2中的ID与列的名称进行连接。如果有一场比赛,我有一个别名返回列的名称,就像这样:

city_1 AS newyour 

,并使用GROUP_CONCAT变量@sql将包含所有这样的列:

date,city_1 as newyork,city_2 as london,city_100 as istanbul 

然后,我将'SELECT ' +列名与别名+ ' FROM Table_1'连接起来,然后执行结果查询。

相关问题