如何查询同一BARCODE列中含前缀与无前缀的关联条码记录?
解决BARCODE列纯数字条码与对应带前缀条码的查询问题
核心思路
先筛选出所有纯数字的条码记录,再通过自连接匹配对应的带前缀条码(单个字符前缀+纯数字内容)。
SQL Server 版本语句
SELECT pure.BARCODE AS 纯数字条码, prefixed.BARCODE AS 带前缀条码 FROM 你的表名 pure LEFT JOIN 你的表名 prefixed ON prefixed.BARCODE LIKE '_' + pure.BARCODE WHERE ISNUMERIC(pure.BARCODE) = 1
ISNUMERIC(pure.BARCODE) = 1:筛选出所有纯数字的条码记录LEFT JOIN关联带前缀的条码,_匹配任意单个字符前缀,确保前缀后紧跟纯数字条码内容- 若纯数字条码无对应带前缀记录,带前缀条码列会显示
NULL,便于识别孤立数据
MySQL 版本语句
SELECT pure.BARCODE AS 纯数字条码, prefixed.BARCODE AS 带前缀条码 FROM 你的表名 pure LEFT JOIN 你的表名 prefixed ON prefixed.BARCODE REGEXP CONCAT('^[A-Za-z]', pure.BARCODE, '$') WHERE pure.BARCODE REGEXP '^[0-9]+$'
pure.BARCODE REGEXP '^[0-9]+$':精准匹配纯数字条码REGEXP CONCAT('^[A-Za-z]', pure.BARCODE, '$'):限定前缀为单个字母,避免匹配非字母前缀的异常数据
之前语句的问题
WHERE [BARCODE] LIKE '_'+[BARCODE]逻辑错误,该条件要求条码值等于「下划线+自身」,不可能有符合条件的记录,自然无法得到预期结果。
内容的提问来源于stack exchange,提问作者jshjsh
相关产品推荐
相关产品推荐

