为什么我们不能使用*关键字在MySQL中连接?
SELECT concat(*) FROM table
Run Code Online (Sandbox Code Playgroud)
要么
SELECT group_concat(*) FROM table
Run Code Online (Sandbox Code Playgroud)
有没有其他方法我们可以访问列中的值而不显式使用列名称?
fth*_*lla 35
要连接表中的所有列,您不能使用该*关键字,但需要显式列出所有列:
SELECT CONCAT(col1, col2, col3, ....)
FROM yourtable
Run Code Online (Sandbox Code Playgroud)
或者您可能想要使用CONCAT_WS它将跳过空值:
SELECT CONCAT_WS(',', col1, col2, col3, ....)
FROM yourtable
Run Code Online (Sandbox Code Playgroud)
如果您不想手动指定所有列名,则可以使用dinamic查询.此查询将返回表的所有列名:
SELECT `column_name`
FROM `information_schema`.`columns`
WHERE `table_schema`=DATABASE()
AND `table_name`='yourtable';
Run Code Online (Sandbox Code Playgroud)
使用GROUP_CONCAT,您可以获得所有列名称的列表:
GROUP_CONCAT(CONCAT('`', column_name, '`'))
Run Code Online (Sandbox Code Playgroud)
以逗号分隔的格式引用:
`col1`,`col2`,`col3`,`col4`,...
Run Code Online (Sandbox Code Playgroud)
所以现在我们有了所有的元素来创建我们的查询:
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;
Run Code Online (Sandbox Code Playgroud)
此查询将@sql字符串设置为:
SELECT CONCAT_WS('', col1, col2, col3, ....) AS all_columns FROM yourtable
Run Code Online (Sandbox Code Playgroud)
这段代码将执行它:
PREPARE stmt FROM @sql;
EXECUTE stmt;
Run Code Online (Sandbox Code Playgroud)
请看这里的小提琴.
| 归档时间: |
|
| 查看次数: |
17180 次 |
| 最近记录: |