Powinieneś być w stanie zastosować funkcję agregującą do wszystkich kolumn, a następnie GROUP BY id
:
select id,
max(name) name,
max(age) age,
max(grade) grade
from yourtable
group by id
Zobacz SQL Fiddle z wersją demonstracyjną
Jeśli chodzi o strukturę DB, jedynym problemem, który widzę, jest to, że wstawiasz wiele rekordów dla tego samego użytkownika. Powinieneś używać UPDATE
oświadczenie, aby użyć wartości zamiast wstawiać.
Wygląda na to, że chcesz użyć REPLACE
funkcja w MySQL (tutaj jest samouczek
).
Zapytanie byłoby więc podobne do tego:
REPLACE
INTO yourtable (`id`, `name`, `age`, `grade`)
VALUES (0, 'john', 11, null);
Zobacz SQL Fiddle z wersją demonstracyjną