首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要删除表中重复的条目-两个字段组合

问需要删除表中重复的条目-两个字段组合
EN

Stack Overflow用户
提问于 2015-04-09 16:10:27
回答 2查看 51关注 0票数 2

我有张桌子父母可以生几个孩子..。设置如下:

代码语言:javascript
复制
id, parent, child

一些示例数据如下所示:

代码语言:javascript
复制
id  parent_id  child_id
1   2          1
2   2          3
3   2          3

因此,对于本例,我希望删除重复条目,其中parent_id=2和child_id=3

我无权向此表添加键或索引,因此需要手动删除父级具有多个子实例的所有条目。

例如,我不能让Parent=2、Child=3不止一次出现在表中。

我需要查看并删除除Parent=2和Child=3之外的所有实例

有什么建议吗?

如果可能的话,我想用一句话。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-09 16:37:23

使用mysql的多表delete语法在适当地连接到其自身时从表中删除:

代码语言:javascript
复制
delete b
from mytable a
join mytable b on a.id < b.id
  and a.parent_id = b.parent_id
  and a.child_id = b.child_id

连接条件a.id < b.id是必要的,以防止行连接到自己,并将重复标识为重复对中id最高的行。

票数 1
EN

Stack Overflow用户

发布于 2015-04-09 16:13:12

这将删除所有重复行。

代码语言:javascript
复制
ALTER IGNORE TABLE TblName ADD UNIQUE INDEX idx_name (parent, child);

或

代码语言:javascript
复制
CREATE TEMPORARY TABLE tmpTable (id INT);

INSERT  tmpTable
        (id)
SELECT  id
FROM    YourTable yt
WHERE   EXISTS
        (
        SELECT  *
        FROM    YourTabe yt2
        WHERE   yt2.parent = yt.parent 
                AND yt2.child = yt.child 
                AND yt2.id > yt.id
        );

DELETE  
FROM    YourTable
WHERE   ID IN (SELECT id FROM tmpTable);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29543648

复制
相关文章

相似问题

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