Mysql LEFT JOIN 查询返回奇怪的结果。当右侧的 ON 条件“部分”与左侧匹配时,查询返回一条记录。
SELECT s.id sid
, s.points sCredits
, s.ghs
, s.usd
, s.africa
, o.id oid
, o.user_id
, o.item_id
FROM pi21o_zoo_item s
LEFT
JOIN pi21o_logos_orders o
ON s.id = o.item_id
AND o.user_id = '268'
WHERE s.id = '268'
问题是当 s.id = '268'
和 o.item_id = '268-AGW'
时查询返回一条记录
最佳答案
你的问题是,当你比较一个整数 (s.id
) 和一个字符串 (o.item_id
) 时,MySQL 会自动将字符串转换为整数(参见manual)。由于 '268-AGW'
以整数开头,它被成功转换为 268,然后匹配 s.id
值。要解决此问题,请将 s.id
值转换为字符串,即写入
(CAST(`s`.`id` AS CHAR) = `o`.`item_id`) AND (`o`.`user_id` = '268')
关于MySQL LEFT JOIN 查询行为异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57408556/