Não há uma boa solução para a ausência de SQL dinâmico nas funções do MySQL, apenas cludges desajeitados. Algumas coisas ainda permanecem absolutamente impossíveis de serem agrupadas, como usar um nome de campo calculado dinamicamente ou um nome de tabela em uma consulta SQL. Sim, de vez em quando há uma necessidade de fazer esse tipo de coisa!
E não tente trapacear colocando o SQL dinâmico em um procedimento armazenado e envolvendo uma função ou gatilho, como o questionador tentou - o MySQL é muito inteligente e fornecerá a mensagem de erro obscura usual. Acredite em mim, eu estive em todas as casas.
Vindo de uma experiência Oracle PL/SQL e MS SQL Server, sinto muita falta da riqueza que PL/SQL e (em pequena medida) T-SQL oferecem para escrever SQL procedural.