You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL中AND与OR运算符行为不符合预期的原因排查

SQL查询条件逻辑异常原因分析

你执行的SQL查询如下:

SELECT
    `user_organisation`.*,
    `users`.`full_name`,
    `users`.`email`,
    `users`.`avatar`
FROM
    `user_organisation`
INNER JOIN `users` ON `users`.`id` = `user_organisation`.`user_id`
WHERE
    `users`.`full_name` LIKE '%test%' OR `users`.`email` LIKE '%test%' AND `user_organisation`.`organisation_id` = 111

查询结果包含了user_organisation.organisation_id等于111和222的记录,但你期望的是筛选出users.full_name或users.email包含“test”且user_organisation.organisation_id为111的记录。

异常原因

这是SQL运算符优先级导致的问题:

  • 在SQL语法中,AND的优先级高于OR,所以你的WHERE子句实际执行逻辑被解析为:
    users.full_name LIKE '%test%' OR (users.email LIKE '%test%' AND user_organisation.organisation_id = 111)
    
  • 也就是说,只要用户的full_name包含“test”,无论其所属组织ID是多少,都会被纳入结果集,这就导致了organisation_id为222的记录被错误筛选出来。

修正方案

给OR连接的两个条件加上括号,让它们作为一个整体与AND条件结合,修正后的WHERE子句如下:

WHERE
    (users.full_name LIKE '%test%' OR users.email LIKE '%test%')
    AND user_organisation.organisation_id = 111

这样会先判断用户的姓名或邮箱是否包含“test”,再校验组织ID是否为111,完全符合你的预期。

内容的提问来源于stack exchange,提问作者M. Çağlar TUFAN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 13:39:40