You really should not be storing data like this. Fortunately, there is a way to undo the damage with recursive SQL, something along these lines:
WITH unpivot (lvl, id, fk_ref, reference, tail) AS (
SELECT 1, id, fk_ref,
CASE WHEN LOCATE(',',reference) > 0
THEN TRIM(LEFT(reference, LOCATE(',',reference)-1))
ELSE TRIM(reference)
END,
CASE WHEN LOCATE(',',reference) > 0
THEN SUBSTR(reference, LOCATE(',',reference)+1)
ELSE ''
END
FROM yourtable
UNION ALL
SELECT lvl + 1, id, fk_ref,
CASE WHEN LOCATE(',', tail) > 0
THEN TRIM(LEFT(tail, LOCATE(',', tail)-1))
ELSE TRIM(tail)
END,
CASE WHEN LOCATE(',', tail) > 0
THEN SUBSTR(tail, LOCATE(',', tail)+1)
ELSE ''
END
FROM unpivot
WHERE lvl < 100 AND tail != '')
SELECT id, fk_ref, reference FROM unpivot
PS. Not tested.