MySQL关联查询ON条件和查询结果不一致
CREATE TABLE `a` (
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`supply_id` bigint(20) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE `b` (
`product_id` varchar(60) COLLATE utf8_unicode_ci NOT NULL,
`class` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`product_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
表a:
表b:
SELECT
a.NAME,
a.supply_id,
b.class,
b.product_id
FROM
a
LEFT JOIN b ON a.supply_id = b.product_id
WHERE
a.supply_id = '6516008487748551172';
查询结果:
第二条结果不对,不符合条件 ON ,也不符合WHERE条件。
分析思路:
- 什么情况下可能会出现 6516008487748551172 === 6516008487748551173?
答:算错的情况下... 或者科学计数了?- sql是否有执行on和where顺序问题,尝试on加上 and a.supply_id = '6516008487748551172' 发现结果不变
- 尝试单独搜索两个表,发现是否有单引号影响了搜索结果,猜测数据类型导致on失效
4.得出结论:b表 product_id 是varchar,所以加不加字符串会有影响;
a表 supply_id 是 bigint20,所以加不加字符串无影响。
注意:sql设计表结构数字类型、字符串类型,要明确在sql上区分加不加单引号(最好都加单引号查询)。关联查询on条件必须保证多表的数据类型一致。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· Trae初体验