MySQL concatenando todas las columnas

¿Por qué no podemos concatenar en MySQL usando la palabra clave *?

SELECT concat(*) FROM table 

o

 SELECT group_concat(*) FROM table 

¿Hay alguna otra forma en que podamos acceder a los valores en una columna sin usar explícitamente el nombre de la columna?

Para concatenar todas las columnas de una tabla, no puede usar la palabra clave * , pero debe enumerar explícitamente todas las columnas:

 SELECT CONCAT(col1, col2, col3, ....) FROM yourtable 

o puede usar CONCAT_WS que CONCAT_WS valores nulos:

 SELECT CONCAT_WS(',', col1, col2, col3, ....) FROM yourtable 

Si no desea especificar todos los nombres de columna manualmente, podría usar una consulta dinámica. Esta consulta devolverá todos los nombres de columna de su tabla:

 SELECT `column_name` FROM `information_schema`.`columns` WHERE `table_schema`=DATABASE() AND `table_name`='yourtable'; 

y al usar GROUP_CONCAT puede obtener una lista de todos los nombres de columna:

 GROUP_CONCAT(CONCAT('`', column_name, '`')) 

citado, en un formato separado por comas:

 `col1`,`col2`,`col3`,`col4`,... 

así que ahora tenemos todos los elementos para crear nuestra consulta dinámicamente:

 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; 

esta consulta establecerá la cadena @sql a algo así como:

 SELECT CONCAT_WS('', col1, col2, col3, ....) AS all_columns FROM yourtable 

y este código lo ejecutará:

 PREPARE stmt FROM @sql; EXECUTE stmt; 

Por favor, mira el violín aquí .