使用通配符在MySQL数据库中查找重复数据

时间:2018-07-04 09:26:16

标签: mysql sql database duplicates wildcard

我正在努力创建一个有效的查询,该查询将在数据库中搜索可能的重复数据。

使用常规方法无效,因为看起来像123456和123456的数据应该被认为是相同的。

请大家帮我编写查询,以搜索这些重复项。

数据全部集中在一个字段中,可以称之为“数字”。

Sample data: 
id                    | number
0                     | 123456
1                     | 124355
2                     | 123432
3                     | 123 456

Expected output:
id               | number
0                | 123456
3                | 123 456

预先感谢

2 个答案:

答案 0 :(得分:0)

您可以替换空格,例如:

  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, ' ', '') 

答案 1 :(得分:0)

我建议一种替代解决方案,该解决方案应使用@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, ' ', '');

这将产生一个“报告”,以识别哪个是“源”值和“重复”值。

我已经创建了sql fiddle来尝试这两种方法。