mysql - 修复数据库重复条目(MySQL 错误)

标签 mysql duplicates

我正在使用 MySQL 4.1。一些表具有违反约束的重复条目。

当我尝试对行进行分组时,MySQL 无法将这些行识别为相似的。

例子:

表 A 有一列“名称”,具有 Unique 属性。
该表包含一行,名称为“Hach?”和一行同名但末尾有一个方 block 而不是“?” (我无法在此文本字段中重现)
对这两行的“分组依据”返回 2 个单独的行

这会导致一些问题,包括我无法导出和重新导入数据库。在重新导入错误时提到插入失败,因为它违反了约束。

理论上我可以尝试导入,等待第一个错误,修复导入脚本和原始数据库,然后重复。实际上,这将需要很长时间。

有没有办法列出所有异常或强制数据库重新检查约束(并列出所有违背它们的值/行)?

如果有帮助,我可以提供 .MYD 文件。

最佳答案

列出所有异常:

SELECT name, count(*) FROM TableA GROUP BY name HAVING count(*) > 1;

有几种方法可以解决删除重复项的问题,您的路径将在很大程度上取决于您拥有的重复项数量。

参见 this因此,请问如何从您的表格中删除这些内容。

这是我在那里提供的解决方案:

-- Setup for example
create table people (fname varchar(10), lname varchar(10));

insert into people values ('Bob', 'Newhart');
insert into people values ('Bob', 'Newhart');
insert into people values ('Bill', 'Cosby');
insert into people values ('Jim', 'Gaffigan');
insert into people values ('Jim', 'Gaffigan');
insert into people values ('Adam', 'Sandler');

-- Show table with duplicates
select * from people;

-- Create table with one version of each duplicate record
create table dups as 
    select distinct fname, lname, count(*) 
    from people group by fname, lname 
    having count(*) > 1;

-- Delete all matching duplicate records
delete people from people inner join dups 
on people.fname = dups.fname AND 
   people.lname = dups.lname;

-- Insert single record of each dup back into table
insert into people select fname, lname from dups;

-- Show Fixed table
select * from people;

关于mysql - 修复数据库重复条目(MySQL 错误),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2273526/

相关文章:

mysql - 仅当列为空时才更新列——在replace into语句中

php - 如何制作表格并保存url和html代码?

php - 处理具有 1000~ 个变量的数据,最好使用 SQL

java - 避免/解决 Maven 项目中的重复类

Python 3.x pandas 如何比较重复项并删除 csv 中具有较高值的​​行?

mysql - 查询两个具有不同列但一个列之间没有关系的表

mysql - Yii - 创建临时表并在下一个查询中使用它会产生一般错误 : 2014 Cannot execute queries while other unbuffered queries are active

python - 从列表中删除所有重复项 - 不保留重复项的实例

python - 按重复项对 DataFrame 的行进行排序

mysql - 从 mySQL 数据库中删除列重复的重复行