Anteriormente dije que esto no se podía hacer, pero estaba equivocado. Terminé necesitando algo como esto, así que miré a mi alrededor y descubrí que declaraciones preparadas del lado del servidor le permite crear 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
;