首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于删除具有重复条目的行的Mysql查询

用于删除具有重复条目的行的Mysql查询
EN

Stack Overflow用户
提问于 2018-05-02 09:34:48
回答 2查看 49关注 0票数 0

我希望删除所有具有重复条目的行,并且不希望保留每个行中的单个行。我希望删除所有有重复条目的条目。在这里,我引用了一些代码,这些代码将保持最高或最低的id值。这里的所有查询都将保留来自重复记录的一个条目。

我尝试过的Mysql查询是

代码语言:javascript
复制
DELETE * ,count(*)as n FROM cart by rfid HAVING n>1

DB设计:

代码语言:javascript
复制
ID(PK)|RFID    |CATAGORY                                                       
1     |1       |5                                                                                           
2     | 1      | 5                                                                                        
3     | 2      | 4                                                                                       
4     |3       | 6                                                                                                           

输出:

代码语言:javascript
复制
ID(PK)|RFID|CATAGORY                                                                       
2     | 1      | 5                                                                                        
3     | 2      | 4                                                                                       
4     |3       | 6                                                                                                           

预期结果:

代码语言:javascript
复制
ID(PK)|RFID|CATAGORY                                                               
 3     | 2      | 4                                                                                        
 4     |3       | 6                                                                                                                                                                                                                                                                                       
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-02 11:12:54

选择不同和最古老的条目(注释:使用MIN(),假设id是自动增量模式和PK),只需切换到MAX(),以保留最新的。

代码语言:javascript
复制
SELECT MIN(id) FROM cart group by rfid;

(删除前面选择中没有的所有内容)。

代码语言:javascript
复制
DELETE FROM cart where id NOT in (SELECT MIN(id) FROM cart group by rfid);

由于无法为FROM子句中的update指定目标表(在本例中为DELETE),所以上面的内容无法工作,但是您可以通过一个子subselect来遍历它,所以最后的工作查询是:

代码语言:javascript
复制
DELETE FROM cart WHERE id NOT IN (SELECT MIN(A.id) FROM (SELECT * FROM cart) A group by A.rfid);

编辑(删除具有count>1的所有条目)

代码语言:javascript
复制
DELETE FROM cart WHERE id  IN( 
  SELECT A.id FROM (SELECT * FROM cart) A where A.rfid IN 
  (SELECT B.rfid from  (SELECT * FROM cart) B group by B.rfid having count(B.rfid)>1)
);
票数 0
EN

Stack Overflow用户

发布于 2018-05-02 15:17:45

代码语言:javascript
复制
DELETE cart.* FROM cart INNER JOIN (SELECT rfid,catagory FROM cart GROUP BY rfid,catagory HAVING COUNT(*)>1) dup ON cart.rfid = dup.rfid AND cart.`catagory` = dup.`catagory`                                                                                                                     

这个查询解决了我的problem.thank u

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50131375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档