英文:
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.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论