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

MySQL查询仅匹配以数字开头的supplier_name,求排查SQL语句问题

问题分析与解决方案

你的查询语句出现这种差异的核心原因是MySQL的隐式类型转换在搞鬼,具体来说是b.supplier_name!=0这个条件导致的。

为什么会这样?

假设product表的supplier_name字段是字符串类型(比如VARCHAR),当你把字符串和数字0做比较时,MySQL会自动把字符串转换成数字再进行比较:

  • 对于以数字开头的字符串(比如'2020103'),转换后是对应的数字2020103,显然不等于0,所以会通过b.supplier_name!=0的条件。
  • 对于以字母开头的字符串(比如'U13002L1'),MySQL无法将其转换成有效数字,会直接转为0,这时候b.supplier_name!=0就变成了0!=0,结果为false,所以这类记录会被过滤掉。

另外,b.supplier_name!=''这个条件其实已经能排除空字符串,但结合!=0的类型转换问题,才导致了你的异常结果。

修正方案

你需要把数字0改成字符串'0',让比较在相同类型之间进行,避免隐式转换:

SELECT a.*, b.* 
FROM `links` a, `product` b 
WHERE a.title LIKE CONCAT('%',b.supplier_name,'%') 
  AND b.supplier_name != '' 
  AND b.supplier_name != '0';

如果你的业务场景中还需要排除其他类似的无效值(比如全空格的字符串),可以进一步优化条件,比如加上TRIM(b.supplier_name) != ''和TRIM(b.supplier_name) != '0',确保过滤更彻底。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:05:20