我有一个表,它应该跟踪给定配置文件的访问者(用户id对用户id对)。事实证明,我的SQL查询有点不对劲,并且生成了多个对,而不是预期的单个对。事后看来,我应该对每个id+id对实施唯一的约束。
现在,我该如何着手清理桌子呢?我想要做的是删除所有重复的对,只留下一个。
因此,例如,更改以下内容:
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
...
如下所示:
23515 -> 52525 date_visited
12345 -> 54321 date_visited
更新:以下是所需的表结构:
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
发布于 2011-05-04 20:02:11
以下是Frank Schmitt's solution的一个小解决方案,它利用一个临时表来允许他的解决方案在MySQL上工作:
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
)
发布于 2017-12-21 19:14:59
这将会起作用:
With NewCTE
AS
(
Select *, Row_number() over(partition by ID order by ID)as RowNumber from
table_name
)
Delete from NewCTE where RowNumber > 1
发布于 2011-05-04 19:35:27
选择所有唯一行
将它们复制到新的临时表
截断原始表
将临时表数据复制到原始表
这就是我要做的。我不确定是否有一个查询可以为您完成所有这些操作。
https://stackoverflow.com/questions/5882649
复制相似问题