2013-02-20 3 views
1

Существует 2 таблицы базы данных, как показано ниже. Таблица_1 & Таблица_2. Столбец table_1 соответствует значению id таблицы_2. Значения имени таблицы_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. Этот код будет извлекать все имена столбцов таблицы_1 и будет пытаться присоединиться к имени столбцов с идентификаторами в таблице_2. Если есть совпадение, я возвращаю имя столбца с псевдонимом, например:

city_1 AS newyour 

и используя GROUP_CONCAT переменной @sql будет содержать все столбцы, как это:

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

Затем я конкатенирую 'SELECT ' + имена столбцов с псевдонимом + ' FROM Table_1' и выполнив полученный запрос.

Смежные вопросы