【问题标题】:How to remove duplicated records from a MySQL table? [duplicate]如何从 MySQL 表中删除重复记录? [复制]
【发布时间】:2013-02-07 07:07:04
【问题描述】:

如果您能帮我解决这个 sql 问题,我将不胜感激。

我有一个包含两列的表。在本例中将它们命名为 UserID 和 LocationID。

我想清理这个表,所以我想保留每对唯一的 UserID 和 LocationID 的第一次出现,并删除包含相同对的其他行。换句话说,我想知道他去过的每个用户的每个位置。如果他一次又一次地访问同一个地方并被记录,我想删除那些记录。例如,这是原始表:

ID UserID  LocationID
1. "user1" "location1"
2. "user1" "location2"
3. "user2" "location3"
4. "user1" "location1"
5. "user2" "location3"
6. "user2" "location3"

我想删除 4.、5. 和 6. 行。

是否有可能在一个mysql命令中解决它? 谢谢。

【问题讨论】:

  • 你怎么知道什么是“第一次出现”,仅仅因为它在你的输出中是第一个并不一定意味着它是第一个进入数据库的......第二个数字来自哪里?它们在表中是否也带有某种列名或仅用于说明目的?
  • 您的表是否有AUTO_INCREMENT 字段,例如rowID 之类的?
  • 是的,数字是记录的ID。自动递增的 INT。 “第一次”出现是指最低的 id。
  • 删除它们后,将 [UserID,LocationID] 定义为主键以避免将来出现同样的问题。
  • @Aris:或者更确切地说是UNIQUE KEYPRIMARY KEY 应该是ID 字段。

标签: mysql


【解决方案1】:

使用自联接删除:

DELETE t2.*
FROM tablename AS t1
INNER JOIN tablename AS t2
    ON t1.UserID = t2.UserID
    AND t1.LocationID = t2.LocationID
WHERE t1.ID < t2.ID

tablename 应替换为您的表名。

【讨论】:

    【解决方案2】:

    要添加到 Oswald 的答案,以防止将来出现重复,您可以使用 INSERT...ON DUPLICATE UPDATE:

    INSERT INTO table (a,b,c) VALUES (1,2,3)
    ON DUPLICATE KEY UPDATE c=c+1;
    
    UPDATE table SET c=c+1 WHERE a=1;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-07
      • 1970-01-01
      相关资源
      最近更新 更多