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

gzszwxb4  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(501)

我正在努力创建一个工作查询来搜索数据库中可能存在的重复数据。
使用常规方法不起作用,因为看起来像123456和123456的数据应该被认为是相同的。
请你们能帮我写一个查询,将搜索这些类型的重复。
数据都在一个字段中,我们称之为“数字”。

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

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

提前谢谢

cwdobuhd

cwdobuhd1#

我建议另一种解决方案,使用@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来试验这两种方法。

iaqfqrcu

iaqfqrcu2#

您可以替换空格,例如:

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

相关问题