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条件。

分析思路:

  1. 什么情况下可能会出现 6516008487748551172 === 6516008487748551173?
    答:算错的情况下... 或者科学计数了?
  2. sql是否有执行on和where顺序问题,尝试on加上 and a.supply_id = '6516008487748551172' 发现结果不变
  3. 尝试单独搜索两个表,发现是否有单引号影响了搜索结果,猜测数据类型导致on失效


4.得出结论:b表 product_id 是varchar,所以加不加字符串会有影响;
a表 supply_id 是 bigint20,所以加不加字符串无影响。
注意:sql设计表结构数字类型、字符串类型,要明确在sql上区分加不加单引号(最好都加单引号查询)。关联查询on条件必须保证多表的数据类型一致。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章