在Mysql中重复数据删除链接表

时间:2013-09-28 10:57:25

标签: mysql

我继承了一个表,它提供了另外两个表之间的链接:

id | product_id | category_id
1 | 10 | 20 
2 | 10 | 21
3 | 34 | 20
4 | 34 | 21
5 | 34 | 21
6 | 10 | 21

在那里,结果是第2行和第6行,第4行和第5行是成对的。

如何编写查询以删除冗余行?

3 个答案:

答案 0 :(得分:1)

您应该在product_idcategory_id上添加唯一键,然后再添加冗余行将无法再进行,因为任何插入都会失败。

但是,如果我们首先删除冗余行,您只能这样做。 你可以通过这样的分组找到它们:

 SELECT id FROM table GROUP BY product_id, category_id HAVING COUNT(*) > 1

之后,您可以从结果中取出ID,将它们分隔为“,”并运行此删除查询:

DELETE FROM table WHERE id IN({comma separated list of id})

答案 1 :(得分:1)

ALTER IGNORE TABLE 'tablename' ADD UNIQUE INDEX idx_name (id, product_id, category_id);

这也将确保表格中不再有重复。

了解更多信息:Remove duplicate rows in MySQL

答案 2 :(得分:1)

创建一个包含重复数据删除值的临时表:

CREATE TABLE y LIKE x;

插入重复数据删除的值:

INSERT INTO y (product_id, category_id)
SELECT product_id, category_id FROM x
GROUP BY product_id, category_id;

交换表格:

DROP TABLE x;
ALTER TABLE y RENAME x;

现在,您可以在(product_id, category_id)上添加唯一键,以防止插入更多重复项。