SQL查找几乎相同的值

时间:2019-05-31 12:07:53

标签: sql duplicates

我正在寻找一个SQL查询来标识几乎相同的表中的产品编号。某些产品编号之间的唯一区别是,在产品编号中完全相同的位置,“ /”被替换为“-”。

示例1:

Product number: ab345-2
Product number: ab345/2

示例2:

Product number: z0059966-98
Product number: z0059966/98

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

您可以使用exists

select t.*
from t
where exists (select 1
              from t t2
              where replace(replace(t2.product_number, '/', ''), '-') = replace(replace(t2.product_number, '/', ''), '-') and
                    t2.product_number <> t1.product_number
             );

请注意,这可以找到与缺少这些字符的数字匹配的字符,例如'ab345-2''ab3452'。此外,它还会删除所有特殊字符,因此它们可以位于任何位置。

答案 1 :(得分:0)

您可以自行加入表格以将每一对重复项放在一行中:

select 
  t1.product_number,
  t2.product_number
from tablename t1 inner join tablename t2
on replace(t1.product_number, '-', '/') = t2.product_number
where t1.product_number like '%-%'

请参见demo
结果:

| product_number | product_number |
| -------------- | -------------- |
| ab345-2        | ab345/2        |
| z0059966-98    | z0059966/98    |