MySQL concat () para crear nombres de columnas para usar en una consulta?

Me gustaría concatenar los nombres de las columnas de forma que la primera parte del nombre de la columna sea una cadena y la segunda parte sea un número que es el resultado de otra consulta.

Por ejemplo:

SELECT CONCAT('column', mytable.mycolumn) FROM table ... 

¿Se puede hacer esto de alguna manera? De esta forma, no me da errores, pero no obtengo el resultado esperado y parece que la concatenación no funciona.

Anteriormente dije que esto no se podía hacer, pero estaba equivocado. Terminé necesitando algo como esto yo mismo, así que miré a mi alrededor y descubrí que las declaraciones preparadas del lado del servidor le permiten construir y ejecutar sentencias SQL arbitrarias a partir de cadenas.

Aquí hay un ejemplo que acabo de hacer para probar el concepto:

 set @query := ( select concat( "select", group_concat(concat("\n 1 as ", column_name) separator ','), "\nfrom dual") from information_schema.columns where table_name = 'columns') ; prepare s1 from @query ; execute s1 ; deallocate prepare s1 ; 

Si el número de columnas es fijo, un enfoque no dynamic podría ser:

 select case mytable.mycolumn when 1 then column1 -- or: when 'a' then columna when 2 then column2 when ... else ... end as my_semi_dynamic_column from ... 

No creo que puedas hacer esto con CONCAT() y CONCAT_WS() . Recomiendo usar el idioma con el que está trabajando para crear los nombres de campo. Hacerlo de esta manera sería bastante aterrador, según de dónde vinieron los datos en la base de datos.

Sugeriría mirar information_schema . El siguiente código no ha sido probado pero debería funcionar teóricamente. Obviamente, reemplace su nombre de tabla con un nombre de tabla apropiado o un enlace a information_schema.tables y use table_type en su cláusula where

 select concat('column', column_name) from information_schema.columns where table_name ='your table name' 

Puede usar fácilmente la siguiente consulta:

 SELECT group_concat( COLUMN_NAME) FROM information_schema.columns WHERE table_name ='your table name';