Я прочитал интересную статью о чем-то вроде этого. Как все знают, нехорошо делать такой запрос, чтобы удалить дубликаты:
SELECT ClassID, StudentID
FROM your_table
GROUP BY ClassID, StudentID;
В этом случае DISTINCT будет лучшим решением. Однако иногда лучше начать с плохого синтаксиса, такого как приведенный выше, чтобы сделать хороший запрос. Сначала давайте выберем дубликаты пар:
SELECT ClassID, StudentID
FROM your_table
GROUP BY ClassID, StudentID
HAVING COUNT(*) > 1;
Как вы можете знать или не знать, вы не можете удалять строки, используя подзапрос в запросе DELETE. Вы должны использовать временную таблицу. Полный код для этого:
CREATE TEMPORARY TABLE keep_lines AS
SELECT MAX(id) AS id_to_keep -- you can use MIN if wanted
FROM your_table
GROUP BY ClassID, StudentID;
DELETE FROM your_table
WHERE id NOT IN (SELECT id_to_keep
FROM keep_lines);
DROP TABLE keep_lines;
Затем, как говорили многие другие, добавьте в свою таблицу УНИКАЛЬНОЕ ограничение!