gpt4 book ai didi

sql - 删除除一条重复记录以外的所有记录

转载 作者:行者123 更新时间:2023-12-03 08:45:31 24 4
gpt4 key购买 nike

我有一个表,应该跟踪给定配置文件的访问者(用户 ID 到用户 ID 对)。事实证明,我的 SQL 查询有点偏离,并且正在生成多对而不是预期的单对。事后看来,我应该对每个 id+id 对强制执行唯一约束。

现在,我该怎么收拾 table 呢?我想要做的是删除所有重复的对,只留下一个。

所以例如改变这个:

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

最佳答案

ANSI SQL 解决方案

在子查询中使用 group by:

delete from my_tab where id not in 
(select min(id) from my_tab group by profile_id, visitor_id);

您需要某种唯一标识符(这里,我使用的是 id)。

MySQL解决方案

正如@JamesPoulson 所指出的,这会导致 MySQL 中的语法错误;正确的解决方案是(如 James' answer 所示):
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
);

关于sql - 删除除一条重复记录以外的所有记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5882649/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com