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

3

我很难创建一个可工作的查询,以在我们的数据库中搜索可能的重复数据。

使用传统方法不起作用,因为长得像 123456 和 123 456 的数据应该被视为相同的。

请帮助我编写一个查询,以搜索这些类型的重复项。

所有数据都在一个字段中,我们称之为“number”。

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

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

感谢您的提前帮助。

1
请分享样本数据和您的预期输出 - Zaynul Abadin Tuhin
1
空间是唯一的问题吗?还是存在其他情况? - Ankur Patel
2个回答

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

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来尝试这两种方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接