我正在努力创建一个有效的查询,该查询将在数据库中搜索可能的重复数据。
使用常规方法无效,因为看起来像123456和123456的数据应该被认为是相同的。
请大家帮我编写查询,以搜索这些重复项。
数据全部集中在一个字段中,可以称之为“数字”。
Sample data:
id | number
0 | 123456
1 | 124355
2 | 123432
3 | 123 456
Expected output:
id | number
0 | 123456
3 | 123 456
预先感谢
答案 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来尝试这两种方法。