英文:
Get a SELECT result with column comments
问题
我有各种包含重要列注释的数据表。我想要获取一个SELECT结果,不仅包括标题中的列名,还包括注释。
column_name1|column_name2|...
column_comment1|column_comment2|...
column_data1(1)|column_data2(1)|...
column_data1(2)|column_data2(2)|...
column_data1(i)|column_data2(i)|...
.
.
.
我尝试提取注释,如下所示...
SELECT column_comment FROM `information_schema`.`COLUMNS` as columns
    WHERE
        table_name = 'mytable'
但找不到将结果转置为后续UNION with SELECT * FROM mytable data的方法。
更新
我有一个名为mytable的表
+------+-------+--------------------------------------+
| id   | name  | address                              |
+------+-------+--------------------------------------+
| 1    | John  | ...                                  |
| 2    | Lissy | ...                                  |
| 3    | Elis  | ...                                  |
| 4    | Jack  | ...                                  |
+------+-------+--------------------------------------+
列有注释:
CREATE TABLE `mytable` (
  `id` bigint(10) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) unsigned DEFAULT NULL COMMENT 'a name comment',
  `date` varchar(500) DEFAULT NULL COMMENT 'an address comment',
PRIMARY KEY (`id`),
UNIQUE KEY `id_UNIQUE` (`id`))
我想要看到类似于以下的内容:
+------+-----------------+--------------------------------------+
| id   | name            | address                              |
+------+-----------------+--------------------------------------+
|      | a name comment  | an address comment                   |
+------+-----------------+--------------------------------------+
| 1    | John            | ...                                  |
| 2    | Lissy           | ...                                  |
| 3    | Elis            | ...                                  |
| 4    | Jack            | ...                                  |
+------+-----------------+--------------------------------------+
英文:
I have various tables with data that have important comments on the columns. I want to get a SELECT result not only with column names in the header, but also with comments.
column_name1|column_name2|...
column_comment1|column_comment2|...
column_data1(1)|column_data2(1)|...
column_data1(2)|column_data2(2)|...
column_data1(i)|column_data2(i)|...
.
.
.
I tried to extract comments like...
SELECT column_comment FROM `information_schema`.`COLUMNS` as columns
    WHERE
        table_name = 'mytable'
but found no way to transpose the results into columns for subsequent
UNION with SELECT * FROM mytable data
UPDATE
I have a table mytable
+------+-------+--------------------------------------+
| id   | name  | address                              |
+------+-------+--------------------------------------+
| 1    | John  | ...                                  |
| 2    | Lissy | ...                                  |
| 3    | Elis  | ...                                  |
| 4    | Jack  | ...                                  |
+------+-------+--------------------------------------+
Columns have comments:
CREATE TABLE `mytable` (
  `id` bigint(10) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) unsigned DEFAULT NULL COMMENT 'a name comment',
  `date` varchar(500) DEFAULT NULL COMMENT 'an address comment',
PRIMARY KEY (`id`),
UNIQUE KEY `id_UNIQUE` (`id`))
I want to see something like:
+------+-----------------+--------------------------------------+
| id   | name            | address                              |
+------+-----------------+--------------------------------------+
|      | a name comment  | an address comment                   |
+------+-----------------+--------------------------------------+
| 1    | John            | ...                                  |
| 2    | Lissy           | ...                                  |
| 3    | Elis            | ...                                  |
| 4    | Jack            | ...                                  |
+------+-----------------+--------------------------------------+
答案1
得分: 1
I guess you may use below dynamic query:
set @sql = null;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'max(case when column_name = ''',
      column_name,
      ''' then column_comment end) as ', 
      column_name)
  )  into @sql
FROM
(
  select column_name
  FROM `information_schema`.`COLUMNS` as columns
    WHERE table_name = 'T'
)d;
SET @sql = CONCAT('SELECT ',  @sql, ' FROM information_schema.COLUMNS WHERE table_name = ''T'' union all select * from T');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
Here is the fiddle.
英文:
I guess you may use below dynamic query -
set @sql = null;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'max(case when column_name = ''',
      column_name,
      ''' then column_comment end) as ', 
      column_name)
  )  into @sql
FROM
(
  select column_name
  FROM `information_schema`.`COLUMNS` as columns
    WHERE table_name = 'T'
)d;
SET @sql = CONCAT('SELECT ',  @sql, ' FROM information_schema.COLUMNS WHERE table_name = ''T'' union all select * from T');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
Here is the fiddle.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论