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

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