首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql中的去重复链接表

问Mysql中的去重复链接表
EN

Stack Overflow用户
提问于 2013-09-28 10:57:24
回答 3查看 31关注 0票数 2

我继承了一个表,该表提供了如下所示的其他两个表之间的链接:

代码语言:javascript
复制
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行是对。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-09-28 11:04:06

您应该在product_id和category_id上添加一个唯一的键,这样就不可能再添加多余的行了,因为任何插入都会失败。

但是,只有首先删除冗余行,才能做到这一点。你可以通过这样的分组来找到它们:

代码语言:javascript
复制
 SELECT id FROM table GROUP BY product_id, category_id HAVING COUNT(*) > 1

在此之后,您可以从结果中提取ids,通过“,”分隔它们,然后运行以下delete查询:

代码语言:javascript
复制
DELETE FROM table WHERE id IN({comma separated list of id})
票数 1
EN

Stack Overflow用户

发布于 2013-09-28 11:08:57

代码语言:javascript
复制
ALTER IGNORE TABLE 'tablename' ADD UNIQUE INDEX idx_name (id, product_id, category_id);

这也将确保今后不再有重复的表格。

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

票数 1
EN

Stack Overflow用户

发布于 2013-09-28 11:17:21

创建一个临时表,该表将保存已重复的值:

代码语言:javascript
复制
CREATE TABLE y LIKE x;

插入已重复的值:

代码语言:javascript
复制
INSERT INTO y (product_id, category_id)
SELECT product_id, category_id FROM x
GROUP BY product_id, category_id;

交换表:

代码语言:javascript
复制
DROP TABLE x;
ALTER TABLE y RENAME x;

现在,您可以在(product_id, category_id)上添加一个唯一的键,以防止进一步的重复插入。

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

https://stackoverflow.com/questions/19066182

复制
相关文章

相似问题

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