要连接表中的所有列,不能使用
*关键字,但是需要显式列出所有列:
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,您可以获得所有列名称的列表:
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;
请看这里的小提琴。



