我有一个表,其中包含约60万个项目,由ID和条形码标识。

这些条形码中有一些是重复的,但不是完全相同,因为有些有前缀,有些没有(例如7290001234567与1234567)

我需要找到所有条形码相同且带有和不带有前缀的商品-输出应为:

id  barcode
1   7290001234567
2   1234567
...


我尝试了以下操作,但由于子查询返回多个项目而导致功能中断,因此无法正常工作:

select *
  from item
 where barcode like concat("%", (select barcode from item where char_length(barcode) <= 8));

最佳答案

您可以使用子查询并加入

select *
from item
INNER JOIN  (
  select barcode from item where char_length(barcode) <= 8)
) T ON item.barcode like concat('%', T.barcode)


或使用自我联接

select *
from item i1
INNER JOIN item i2 on i1.barcode like concat('%', i2.barcode)


确保您在条形码上有索引..(可能是一个缓慢的查询)

关于mysql - 在列中查找其他值的子字符串的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57507225/

10-10 17:57