我已经看过一些关于删除/更新重复行的其他帖子,但我对如何正确应用它来解决我的特定困境感到有些困惑。
希望有人能给我一个正确的方向。
我有一个表格,上面有一些重复的行,并希望通过将isdeleted列设置为1来为每个用户逻辑删除它们。
我的表有一个名为Id的主键,它是一个无符号的bigint,它有一个名为cid的列,它代表另一个重复的id。 cid在用户与用户之间不是唯一的,但对于特定用户而言应该是唯一的。
例如,你可以在我的表中看到这个:
id | cid | userid | is_deleted
1 | 1 | 100 | 0
2 | 2 | 101 | 0
3 | 1 | 102 | 0
4 | 1 | 100 | 0
5 | 2 | 101 | 0
因此,在这种情况下,用户#100有两个相同的CID - 记录#1和记录#4。类似地,用户#101有两个相同的CID - 记录#2和记录#5
我想做的只是为给定用户获取重复的CID并将is_deleted设置为1,而不是清除实际的行。我想保留一条记录为is_deleted = 0,这样就可以保留一些记录。
所以我希望的输出是:
id | cid | userid | is_deleted
1 | 1 | 100 | 0
2 | 2 | 101 | 0
3 | 1 | 102 | 0
4 | 1 | 100 | 1
5 | 2 | 101 | 1
我可以在代码中执行此操作,但它会更加复杂,并且我已经看到了对纯SQL语句的一些惊人的响应;有人能提出一些建议或提供解决方案吗?
非常感谢!
答案 0 :(得分:0)
您可以使用以下查询来更新N个重复条目中的1行
Update table t
inner join
(select id from table group by userid,cid having count(1)>1) t1
on t1.id = t.id
set t.is_deleted=1;