【问题标题】:MySQL Select where a col1 (int) has the value 2 OR 3 AND col2 (tinybit) = 0 [duplicate]MySQL Select where a col1 (int) has value 2 OR 3 AND col2 (tinybit) = 0 [重复]
【发布时间】:2025-11-23 08:30:01
【问题描述】:

正如您在问题中看到的,我需要选择具有动态给出的两个值中的任何一个的所有行,并且这些行的布尔值(tinyint)为假

这是我当前的查询,但它只排除 category_company_id 为 0 和 category_disabled 为 1 的行,而不是 category_company_id 为 1 和 category_disabled 为 1 的行

SELECT * FROM `category` 
WHERE `category_company_id` = 1 
OR `category_company_id` = 0 
AND `category_disabled` = 0

我做错了什么?

有没有办法将 WHERE 和 OR 与 AND 分开?

提前致谢

【问题讨论】:

  • 使用括号。

标签: mysql


【解决方案1】:

您的代码相当于:

WHERE `category_company_id` = 1 
OR (`category_company_id` = 0 AND `category_disabled` = 0)

因为 AND 的优先级高于 OR。
您可以使用括号:

WHERE (`category_company_id` = 1 OR `category_company_id` = 0 )
AND `category_disabled` = 0

或运算符 IN:

WHERE `category_company_id` IN (0, 1) AND `category_disabled` = 0

【讨论】: