下面有两个数据库表Table_1 & Table_2。Table_1列索引与table_2的id值匹配。Table_2的Name值将作为查询结果的列标题。
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查询是什么?
谢谢
发布于 2013-02-20 19:12:04
您可以使用这样的解决方案:
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中的in连接起来。如果匹配,我将返回带有别名的列名,如下所示:
city_1 AS newyour使用GROUP_CONCAT,变量@sql将包含所有列,如下所示:
date,city_1 as newyork,city_2 as london,city_100 as istanbul然后,我使用别名+ ' FROM Table_1'连接'SELECT ' +列名,并执行结果查询。
https://stackoverflow.com/questions/14977754
复制相似问题