删除 mysql 中的重复记录
Remove duplicate records in mysql
我有一个名为 leads
的 table 有重复记录
Leads:
*account_id
*campaign_id
我想删除所有重复项 account_id
,其中 campaign_id equal to "51"
例如,如果account_id = 1991
在table中出现了两次,则删除带有campaign_id = "51"
的那个,保留另一个。
您可以使用删除连接:
DELETE t1
FROM yourTable t1
INNER JOIN yourTable t2
ON t2.account_id = t1.account_id AND
t2.campaign_id <> 51
WHERE
t1.campaign_id = 51;
从 table 中删除没有问题,前提是:
- 您使用了正确的语法。
- 在进行任何删除操作之前,您已经备份了 table。
但是,我建议使用不同的方法:
- 根据现有 table 创建一个新的 table:
CREATE TABLE mytable_new LIKE mytable;
- 在您不想重复的列上添加唯一约束(或
PRIMARY KEY
):
ALTER TABLE mytable_new ADD UNIQUE(column1,[column2]);
注意:如果要将两个(或更多)列的组合标识为唯一,请将所有列名称放在 UNIQUE()
中,并用逗号分隔。也许在你的情况下,约束是 UNIQUE(account_id, campaign_id)
.
- 将数据从原始 table 插入到新 table:
INSERT IGNORE INTO mytable_new SELECT * FROM mytable;
注意:IGNORE
将仅插入与 UNIQUE()
约束匹配的 non-duplicate 值。如果您的应用程序对 table 运行 MySQL INSERT
查询,则必须通过添加 IGNORE
.
来更新查询
- 检查数据的一致性,当您满意后,将两个 table 重命名为:
RENAME TABLE mytable TO mytable_old;
RENAME TABLE mytable_new TO mytable;
最好的一点是,如果您觉得新的 table 有问题,您仍然可以使用原来的 table。虽然更改 table 的名称只需要不到一秒钟,但这里可能的问题是,如果您有大量数据,可能需要一段时间才能完成 INSERT IGNORE
。
删除 t1
从你的桌子 t1
INNER JOIN yourTable t2
在 t2.account_id = t1.account_id 和
t2.campaign_id <> 51
在哪里
t1.campaign_id = 51;
我有一个名为 leads
的 table 有重复记录
Leads:
*account_id
*campaign_id
我想删除所有重复项 account_id
,其中 campaign_id equal to "51"
例如,如果account_id = 1991
在table中出现了两次,则删除带有campaign_id = "51"
的那个,保留另一个。
您可以使用删除连接:
DELETE t1
FROM yourTable t1
INNER JOIN yourTable t2
ON t2.account_id = t1.account_id AND
t2.campaign_id <> 51
WHERE
t1.campaign_id = 51;
从 table 中删除没有问题,前提是:
- 您使用了正确的语法。
- 在进行任何删除操作之前,您已经备份了 table。
但是,我建议使用不同的方法:
- 根据现有 table 创建一个新的 table:
CREATE TABLE mytable_new LIKE mytable;
- 在您不想重复的列上添加唯一约束(或
PRIMARY KEY
):
ALTER TABLE mytable_new ADD UNIQUE(column1,[column2]);
注意:如果要将两个(或更多)列的组合标识为唯一,请将所有列名称放在 UNIQUE()
中,并用逗号分隔。也许在你的情况下,约束是 UNIQUE(account_id, campaign_id)
.
- 将数据从原始 table 插入到新 table:
INSERT IGNORE INTO mytable_new SELECT * FROM mytable;
注意:IGNORE
将仅插入与 UNIQUE()
约束匹配的 non-duplicate 值。如果您的应用程序对 table 运行 MySQL INSERT
查询,则必须通过添加 IGNORE
.
- 检查数据的一致性,当您满意后,将两个 table 重命名为:
RENAME TABLE mytable TO mytable_old;
RENAME TABLE mytable_new TO mytable;
最好的一点是,如果您觉得新的 table 有问题,您仍然可以使用原来的 table。虽然更改 table 的名称只需要不到一秒钟,但这里可能的问题是,如果您有大量数据,可能需要一段时间才能完成 INSERT IGNORE
。
删除 t1 从你的桌子 t1 INNER JOIN yourTable t2 在 t2.account_id = t1.account_id 和 t2.campaign_id <> 51 在哪里 t1.campaign_id = 51;