sql,使用id删除重复记录

hmtdttj4  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(464)

所以如果文件

表如果employeeid 1有5个文件名相同,则删除4个文件(删除重复的文件名或具有相同文件名的文件名)并将其全部删除。
我在用mariadb

获取所有重复记录的查询

代码

SELECT id, employeeId, filename, COUNT(filename) FROM DOCUMENTS GROUP BY filename
      HAVING COUNT(filename) > 1;
0lvr5msh

0lvr5msh1#

我不确定你是只选择不同的项目还是找出那些重复的项目。如果您只想选择不同的/唯一的值:

SELECT distinct id, employeeId, filename FROM DOCUMENTS GROUP BY filename

我建议您将所选的唯一记录移动到临时表中,然后删除原始表记录,然后将临时表中的唯一记录插入到原始表中。

kpbpu008

kpbpu0082#

例如,如果employeeid1有5个文件具有相同的文件名,那么删除4个文件,只保留1个文件
一种方法使用 delete 带有自联接的语句:

delete d1
from documents d1
inner join documents d2 
    on d2.id < d1.id 
    and d2.filename = d1.filename
    and d2.employeeid = d1.employeeid

这将删除上的重复项 (employeeid, filename) 同时用最小的 id .
通过将一个条件移动到 where 条款,如过滤器 id ;
从文档d1中删除d1内部连接d2.filename=d1.filename和d2.employeeid=d1.employeeid上的文档d2,其中d2.id<d1.id

相关问题