在MySQL中使用NOT IN语句删除某些列上的相同记录

Delete same records on some columns usin NOT IN statement in MySQL

提问人:Gamer In The Game 提问时间:11/16/2023 更新时间:11/16/2023 访问量:31

问:

我有如下表格:

enter image description here

其中包含session_id、user_id、quiz_id question_id列上的相同记录。 所以,我只想保留其中一个,删除其他的。我尝试了以下查询:

DELETE FROM su_submitted_answers WHERE `id` NOT IN (SELECT id from su_submitted_answers GROUP BY session_id, user_id, quiz_id, question_id );

但查询不会影响任何记录。此外,ID 列中没有 NULL 值。

enter image description here

解决我的情况也是必要的,但“为什么上面的查询不起作用”是必不可少的问题。感谢您的帮助。

MySQL的

评论

2赞 P.Salmon 11/16/2023
'“为什么上面的查询不起作用” ' - 因为 NOT IN (SELECT id from su_submitted_answers GROUP BY session_id, user_id, quiz_id, question_id );从来都不是真的。顺便说一句,如果没有聚合函数,则没有聚合函数的分组将出错only_full_group_by如果为 true..

答:

1赞 Akina 11/16/2023 #1

使用多表 DELETE:

DELETE t1
FROM su_submitted_answers t1
JOIN su_submitted_answers t2 ON (t1.session_id, t1.user_id, t1.quiz_id, t1.question_id) = (t2.session_id, t2.user_id, t2.quiz_id, t2.question_id)
WHERE t1.id < t2.id

此查询将删除上述列重复的所有行,但其中具有最大值的行之一除外。id