No hay una buena solución para la ausencia de Dynamic SQL en las funciones de MySQL, solo torpes torpes. Algunas cosas siguen siendo francamente imposibles de resolver, como usar un nombre de campo o de tabla calculado dinámicamente en una consulta SQL. ¡Sí, de vez en cuando es necesario hacer este tipo de cosas!
Y no intente hacer trampa colocando el SQL dinámico en un procedimiento almacenado y envolviéndolo en una función o disparador, como lo intentó el planteador de preguntas:MySQL es demasiado inteligente y le dará el mensaje de error oscuro habitual. Créame, he estado alrededor de todas las casas.
Viniendo de un fondo de Oracle PL/SQL y MS SQL Server, echo mucho de menos la riqueza que PL/SQL y (en una pequeña medida) T-SQL ofrecen para escribir SQL procedimental.