mysql从表中删除重复项

时间:2015-12-31 05:40:38

标签: mysql

我可以通过以下方式找到重复项:

select id,date,count(*) as rep,comment
     from New_opinion group by comment,
     Date,company_id having rep>1;

我相信这给了我一个重复组中的一条记录,它们与相同的评论相匹配,Date和company_id是关闭但只显示其中一个匹配的副本。

我想要选择除一个副本之外的所有副本并删除它们。 id是主键 我已经工作了好几个小时了,不断收到有关操作数需要1列的错误,或者删除非密钥等等。请帮助,其他删除答案似乎无法正常工作。

4 个答案:

答案 0 :(得分:0)

试试这个......

<div class="dp">
  <img src="http://rs618.pbsrc.com/albums/tt265/davejarrett/Avatars/check-in-minion_zps7ee060ac.jpg~c200" alt="" width="128">
  <div class="edit-dp">
    <a href="#">Edit Image</a>
  </div>
</div>

我希望这会有效..

答案 1 :(得分:0)

您的评论组有多个ID,这就是您无法将其用于DELETE的原因。

在字段列表中尝试this.redirect(field.id+'/'+field.subId+'/'+field.pageType); 以查看ID号列表。

组内容不够相似 - 如果每个字段都相同,只要它不存在主键,它就只是一个有用的组。

答案 2 :(得分:0)

尝试此操作以保持行ID最低

DELETE r1 FROM tableName r1, tableName r2 WHERE r1.id > r2.id AND r1.x = r2.x

要保持ID最高的行只需更改

WHERE r1.id < r2.id

答案 3 :(得分:0)

说你有两个公司SMITH&amp; amp; SON,这些行中的哪一行保留了吗?如果确实如此(比如每个公司按日期最新的那个),那么你可能想要选择那些新表,然后截断旧表,然后将新表中的值复制回旧表,然后添加唯一索引这些专栏。如果保留哪个只是其中一个并不重要那么你可以立即添加索引,告诉它忽略该表,这将立即删除重复项,为每个重复发生的公司留下一个随机行。后者是这样的:

ALTER IGNORE TABLE yourtablename ADD UNIQUE companyid, date, comment

如果您需要每个公司的重复日期的最新日期,请参阅GROUPWISE MAXIMUM手册中的教程