You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查找ProductsTable中前缀带不同数量0的重复商品条目

我的ProductsTable数据如下,存在同一商品对应不同编号的情况,有时商品描述也会存在细微差异

ItemNoItemDescripitionStockPrice
0012500苹果1020
0012601香蕉515
012500苹果1018
00012500苹果1016
00AM0120芒果1011
AM0120芒果1012
000AM0120芒果1015

我需要从表中找出所有存在细微差异的重复商品,比如部分商品编号开头带2个0,部分带3个0。
以上表格仅作参考,我的实际表约有25000行数据,商品编号为varchar类型,部分商品编号为字母数字混合格式。

解决方案

处理前导零导致的编号重复

对商品编号做标准化,去掉开头所有前导零后分组,即可快速筛选出同商品不同编号的重复记录,该方案兼容字母数字混合的编号格式,不会修改编号中非前导零的数字和字母内容。
MySQL语法示例:

SELECT 
  TRIM(LEADING '0' FROM ItemNo) AS 标准化后商品编号,
  GROUP_CONCAT(DISTINCT ItemNo) AS 所有原始商品编号,
  GROUP_CONCAT(DISTINCT ItemDescripition) AS 对应商品描述,
  COUNT(*) AS 重复记录数
FROM ProductsTable
GROUP BY 标准化后商品编号
HAVING 重复记录数 > 1
ORDER BY 重复记录数 DESC;

其他数据库适配:

  • SQL Server:替换标准化逻辑为 SUBSTRING(ItemNo, PATINDEX('%[^0]%', ItemNo + 'x'), LEN(ItemNo))
  • PostgreSQL:替换标准化逻辑为 LTRIM(ItemNo, '0')

处理描述细微差异导致的重复

如果是存在空格、大小写、全半角符号这类简单差异,先标准化描述后分组即可:

SELECT 
  LOWER(REPLACE(REPLACE(ItemDescripition, ' ', ''), ' ', '')) AS 标准化后商品描述,
  GROUP_CONCAT(DISTINCT ItemDescripition) AS 所有原始描述,
  GROUP_CONCAT(DISTINCT ItemNo) AS 对应商品编号,
  COUNT(*) AS 重复记录数
FROM ProductsTable
GROUP BY 标准化后商品描述
HAVING 重复记录数 > 1;

如果存在错别字、多余修饰词这类更复杂的差异,可以引入Levenshtein编辑距离函数,筛选两个描述编辑距离≤3的记录即可匹配相似度较高的重复商品,25000行的数据量运算压力极低,不需要额外优化。

内容的提问来源于stack exchange,提问作者MMB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 16:06:02