删除重复项并保留 MAX(id) mysql

Beg*_*ner 1 sql mariadb

我有一个代码,它列出了数据库中数据的所有重复项

SELECT MAX(id) id 
FROM el_student_class_relation 
GROUP BY student_id, class_id 
HAVING COUNT(*) > 1
Run Code Online (Sandbox Code Playgroud)

现在,我试图保留 MAX(id),然后应删除其余的重复项

我尝试了代码

DELETE us 
FROM el_student_class_relation us
INNER JOIN(SELECT MAX(id) id 
            FROM el_student_class_relation 
            GROUP BY student_id, class_id HAVING COUNT(*) > 1) t ON t.id = us.id
Run Code Online (Sandbox Code Playgroud)

但它删除了 MAX(ID) 并保留了其他重复项,这与我想要的相反。

Rak*_*oni 5

尝试这个

DELETE FROM el_student_class_relation 
WHERE id not in 
( 
        SELECT * from 
            (SELECT MAX(id) id 
            FROM el_student_class_relation 
            GROUP BY student_id, class_id) temp_tbl
) 
Run Code Online (Sandbox Code Playgroud)

请注意:不要在内部查询中使用HAVING COUNT(*) > 1 。当只有一条具有相同 id 的记录时,它会产生问题。