Vous devriez pouvoir appliquer une fonction d'agrégation à toutes les colonnes, puis GROUP BY id
:
select id,
max(name) name,
max(age) age,
max(grade) grade
from yourtable
group by id
Voir SQL Fiddle avec démo
En ce qui concerne la structure de la base de données, le seul problème que je vois est que vous insérez plusieurs enregistrements pour le même utilisateur. Vous devriez utiliser une UPDATE
pour utiliser les valeurs au lieu de les insérer.
Il semble que vous souhaitiez utiliser le REPLACE
fonction dans MySQL (voici un tutoriel
).
La requête ressemblerait donc à ceci :
REPLACE
INTO yourtable (`id`, `name`, `age`, `grade`)
VALUES (0, 'john', 11, null);
Voir SQL Fiddle avec démo