1 sql postgresql boolean-logic
在 Postgresql 中,当我使用 OR 进行 SELECT 时似乎不起作用。也许我做错了什么?例如:
SELECT *
FROM toorder
WHERE product_id = 1193
AND status = 'NO'
OR status = 'YES'
Run Code Online (Sandbox Code Playgroud)
结果也给了我不是 product_id = 1193 的结果。状态字段有 3 个答案;在此示例中为 YES、NO 和 DON。任何人都知道为什么它不起作用?
该OR运营商工作得很好,正在发生的事情是,你在做什么是等同于事实:
-- WRONG (not expected):
SELECT * FROM toorder
WHERE (product_id = 1193 AND status = 'NO') OR (status = 'YES')
Run Code Online (Sandbox Code Playgroud)
这意味着您将获得所有结果 with product_id = 1193that have status = 'NO',以及所有其他(无论哪个product_id)与status = 'YES'. 发生这种情况是因为AND运算符优先于OR运算符(实际上OR是优先级最低的那个)。
因此,在您的情况下,您应该根据需要使用显式括号来确定优先级:
-- CORRECT (expected):
SELECT * FROM toorder
WHERE product_id = 1193 AND (status = 'NO' OR status = 'YES')
Run Code Online (Sandbox Code Playgroud)
建议在混合不同类型的运算符时始终使用括号,即使在您想要默认优先级的情况下,它也有助于使代码更清晰并提高可维护性。
补充...正如@wildplasser 所建议的,在这种特定情况下,您可以通过使用IN运算符来进一步简化事情:
SELECT * FROM toorder
WHERE product_id = 1193 AND status IN ('NO', 'YES')
Run Code Online (Sandbox Code Playgroud)
这在逻辑上等同于前面的查询。
| 归档时间: |
|
| 查看次数: |
100 次 |
| 最近记录: |