Debería poder aplicar una función agregada a todas las columnas y luego GROUP BY id
:
select id,
max(name) name,
max(age) age,
max(grade) grade
from yourtable
group by id
Consulte SQL Fiddle con demostración
En cuanto a la estructura de la base de datos, el único problema que veo es que está insertando varios registros para el mismo usuario. Deberías estar usando una UPDATE
declaración para usar los valores en lugar de insertar.
Parece que desea utilizar el REPLACE
función en MySQL (aquí hay un tutorial
).
Entonces la consulta sería similar a esto:
REPLACE
INTO yourtable (`id`, `name`, `age`, `grade`)
VALUES (0, 'john', 11, null);
Consulte SQL Fiddle con demostración