首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >删除除一条重复记录之外的所有记录

删除除一条重复记录之外的所有记录
EN

Stack Overflow用户
提问于 2011-05-04 19:30:10
回答 3查看 42.5K关注 0票数 38

我有一个表,它应该跟踪给定配置文件的访问者(用户id对用户id对)。事实证明,我的SQL查询有点不对劲,并且生成了多个对,而不是预期的单个对。事后看来,我应该对每个id+id对实施唯一的约束。

现在,我该如何着手清理桌子呢?我想要做的是删除所有重复的对,只留下一个。

因此,例如,更改以下内容:

代码语言:javascript
复制
23515 -> 52525 date_visited
23515 -> 52525 date_visited
23515 -> 52525 date_visited
12345 -> 54321 date_visited
12345 -> 54321 date_visited
12345 -> 54321 date_visited
12345 -> 54321 date_visited
23515 -> 52525 date_visited
...

如下所示:

代码语言:javascript
复制
23515 -> 52525 date_visited
12345 -> 54321 date_visited

更新:以下是所需的表结构:

代码语言:javascript
复制
id  int(10)         UNSIGNED    Non     Aucun   AUTO_INCREMENT
profile_id  int(10)         UNSIGNED    Non     0 
visitor_id  int(10)         UNSIGNED    Non     0
date_visited    timestamp           Non     CURRENT_TIMESTAMP   
EN

回答 3

Stack Overflow用户

发布于 2011-05-04 20:02:11

以下是Frank Schmitt's solution的一个小解决方案,它利用一个临时表来允许他的解决方案在MySQL上工作:

代码语言:javascript
复制
delete from `my_tab` where id not in
( SELECT * FROM 
    (select min(id) from `my_tab` group by profile_id, visitor_id) AS temp_tab
)
票数 16
EN

Stack Overflow用户

发布于 2017-12-21 19:14:59

这将会起作用:

代码语言:javascript
复制
With NewCTE
AS
(
Select *, Row_number() over(partition by ID order by ID)as RowNumber from 
table_name
)
Delete from NewCTE where RowNumber > 1
票数 10
EN

Stack Overflow用户

发布于 2011-05-04 19:35:27

选择所有唯一行

将它们复制到新的临时表

截断原始表

将临时表数据复制到原始表

这就是我要做的。我不确定是否有一个查询可以为您完成所有这些操作。

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

https://stackoverflow.com/questions/5882649

复制
相关文章

相似问题

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