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條件必須保證多表的數據類型一致。