使用通配符在 MySQL 数据库中查找重复数据
Finding duplicate data in MySQL database using wildcard
我正在努力创建一个工作查询,以在数据库中搜索可能的重复数据。
用常规方法是行不通的,像这样的数据123456和123456应该是一样的。
你们能帮我写一个查询来搜索这些类型的重复项吗?
数据都在一个字段中让我们称之为'number'。
Sample data:
id | number
0 | 123456
1 | 124355
2 | 123432
3 | 123 456
Expected output:
id | number
0 | 123456
3 | 123 456
提前致谢
您可以替换空格,例如:
select replace(number, ' ', '') , count(*)
from my_table
group by replace(number, ' ', '')
并为获取行过滤具有 count(*) > 1
的结果
select * from my_table m
inner join (
select replace(number, ' ', '') my_val , count(*)
from my_table
group by my_val
having count(*) > 1
) t on t.my_val = m.replace(number, ' ', '')
我建议一个替代解决方案,它在正确答案中使用@scaisEdge 使用的替换技巧。
SELECT
a.id, a.number, b.id as dup_id, b.number as dup_number
FROM
mytable a,
mytable b
WHERE
a.id <> b.id and
a.number = replace(b.number, ' ', '');
这会产生一个 "report" 来识别哪个是 "source" 值和 "duplicated" 值。
我创建了这个 sql fiddle 来试验这两种方法。
我正在努力创建一个工作查询,以在数据库中搜索可能的重复数据。
用常规方法是行不通的,像这样的数据123456和123456应该是一样的。
你们能帮我写一个查询来搜索这些类型的重复项吗?
数据都在一个字段中让我们称之为'number'。
Sample data:
id | number
0 | 123456
1 | 124355
2 | 123432
3 | 123 456
Expected output:
id | number
0 | 123456
3 | 123 456
提前致谢
您可以替换空格,例如:
select replace(number, ' ', '') , count(*)
from my_table
group by replace(number, ' ', '')
并为获取行过滤具有 count(*) > 1
的结果select * from my_table m
inner join (
select replace(number, ' ', '') my_val , count(*)
from my_table
group by my_val
having count(*) > 1
) t on t.my_val = m.replace(number, ' ', '')
我建议一个替代解决方案,它在正确答案中使用@scaisEdge 使用的替换技巧。
SELECT
a.id, a.number, b.id as dup_id, b.number as dup_number
FROM
mytable a,
mytable b
WHERE
a.id <> b.id and
a.number = replace(b.number, ' ', '');
这会产生一个 "report" 来识别哪个是 "source" 值和 "duplicated" 值。
我创建了这个 sql fiddle 来试验这两种方法。