MySQL LEFT JOIN 查询行为异常

标签 mysql sql

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/

相关文章:

SQL join,获取多个同名列

sql - 分析大图 - 检索簇并计算最强路径

php - 从 MySQL-Result 解析变量

php - 无法将表映射到 Symfony - Doctrine 实体。找不到文件但类不在其中,类名或命名空间可能有拼写错误

php - 在 MySQL 中使用 levenshtein 搜索一个结果

sql - 如何在同一个数据库表中查找重复的列值?

python - SQL根据记录是否存在外键指向它来选择查询记录

mysql - 根据 2 行值删除重复项

mysql - 插入数据库

mysql - 如何进行正确的更新查询?