sql - 如何编写连接 2 个表的 where 子句,在子句中有 OR
问题描述
我有 2 张桌子A_ORDERS
和A_ORDERS_LOG
. 表中感兴趣的列A_ORDERS
是PEN
和SKL
,表A_ORDERS_LOG
中感兴趣的列是Status1
和Status2
以及DATE
(仅用于排序我的结果)。PEN
是独特的。
这就是我所拥有的
select
l.pen,status1,status2,date,a.skl
from A_ORDERS_LOG l
join A_ORDERS a on l.PEN=a.PEN
where a.skl='XY'
and status1='75' or status1='13'
and status2='13' or status2='11'
order by l.id,l.date;
我得到了表中所有其他 skl 的所有行A_ORDERS
,但我只想要关于skl=XY
from 的行A_ORDERS
。问题是 PEN 经历了不同的状态,我希望每个行的所有行都PEN
经历了从 75 到 13 然后从 13 到 11 的可能状态。
当我这样说时,我得到了我想要的。
and (status1='75' or status1='13')
and (status2='13' or status2='11');
这是为什么?
提前致谢 :)
解决方案
发生这种情况是因为当有多个运算符时,运算符优先级决定了操作的顺序。执行顺序会显着影响结果值。运算符 AND 的优先级高于 OR 运算符。您希望首先考虑 OR(状态 1 和状态 2)。因此,当您将它们写在括号 () 中时,首先评估 OR 表达式而不是 AND。不存在括号将导致执行 AND 表达式。
推荐阅读
- amazon-web-services - 如何将 AWS CDK 堆栈部署到多个账户?
- reactjs - 如何为缓冲区几何中的每个顶点分配不同的颜色?三.js
- python - 虽然循环没有正确循环其他条件
- android-management-api - Android 管理 - 如何发送批量请求?
- c# - 如何根据要实例化的类的变量类型来实例化一个类
- ag-grid - Ag-grid getRowStyle 无法正常工作
- java - Apache FTPClient:应该/可以在哪个线程上运行“disconnect()”?
- cakephp - CakePHP 4.0 - 如何创建和显示针对字段的验证错误?
- android - 如何使用本机反应检测复选框是否选中?
- kubernetes - 命名空间中的 Istio 自定义网关