Split string no MySQL

O MySQL não tem uma função para quebrar strings separadas por um determinado caractere (vírgula, por exemplo). A maioria das soluções que encontrei na web são baseadas em procedures. Não satisfeito com essa opção, fiz alguns estudos e cheguei à seguinte query:

SELECT DISTINCT 
SUBSTRING_INDEX(SUBSTRING_INDEX('1,2,3,4,5', ',', `i`), ',', -1) AS `val` 
FROM (
  SELECT @n := @n + 1 AS `i` 
  FROM `huge_table`, (SELECT @n := 0) `a` LIMIT 999
) `b`

Explicando:

  1. Geramos uma lista com valores de 1 até 999 (SELECT @n := @n + 1 AS `i` FROM `huge_table`, (SELECT @n := 0) `n` LIMIT 999). Aqui `huge_table` deve ser substituído pelo nome de uma tabela que tenha o número de registros (linhas) no mínimo igual ao valor especificado na cláusula LIMIT.
  2. Em seguida usamos esses valores no sequência de funções SUBSTRING_INDEX para extrair os valores da string.

Obs.: Você pode usar um valor menor (ou maior) no LIMIT se souber que a sua lista tem sempre menos (ou mais) valores.