1

Table_1とTable_2の下に次のような2つのデータベーステーブルがあります。Table_1列インデックスはtable_2のid値と一致します。Table_2の名前の値は、クエリの結果の列ヘッダーになります。

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クエリは何ですか?

ありがとう

4

1 に答える 1

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;

こちらをご覧ください。このコードは、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'し、結果のクエリを実行します。

于 2013-02-20T11:12:03.903 に答える