为什么MySQL中不能使用*关键字进行拼接?
SELECT concat(*) FROM table
或者SELECT group_concat(*) FROM table
除了显式地使用列名,我们还有其他方法可以访问列中的值吗?
*
关键字,但需要显式列出所有列:SELECT CONCAT(col1, col2, col3, ....)
FROM yourtable
或者您可能想使用 CONCAT_WS
,它将跳过空值:
SELECT CONCAT_WS(',', col1, col2, col3, ....)
FROM yourtable
SELECT `column_name`
FROM `information_schema`.`columns`
WHERE `table_schema`=DATABASE()
AND `table_name`='yourtable';
GROUP_CONCAT(CONCAT('`', column_name, '`'))
以逗号分隔的引用格式:
`col1`,`col2`,`col3`,`col4`,...
现在我们有了所有元素,可以动态地创建我们的查询:
SELECT
CONCAT(
'SELECT CONCAT_WS(\'\',',
GROUP_CONCAT(CONCAT('`', column_name, '`') ORDER BY column_name),
') AS all_columns FROM yourtable;')
FROM `information_schema`.`columns`
WHERE `table_schema`=DATABASE()
AND `table_name`='yourtable'
INTO @sql;
这个查询会将@sql字符串设置为类似以下内容:
SELECT CONCAT_WS('', col1, col2, col3, ....) AS all_columns FROM yourtable
并且这段代码将会执行它:
PREPARE stmt FROM @sql;
EXECUTE stmt;
information_schema.columns
以获取列的列表,并将它们自己插入到查询中。 - Gordon Linoff