首页 > 解决方案 > 如何编写连接 2 个表的 where 子句,在子句中有 OR

问题描述

我有 2 张桌子A_ORDERSA_ORDERS_LOG. 表中感兴趣的列A_ORDERSPENSKL,表A_ORDERS_LOG中感兴趣的列是Status1Status2以及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=XYfrom 的行A_ORDERS。问题是 PEN 经历了不同的状态,我希望每个行的所有行都PEN经历了从 75 到 13 然后从 13 到 11 的可能状态。

当我这样说时,我得到了我想要的。

and (status1='75' or status1='13')
and (status2='13' or status2='11');

这是为什么?

提前致谢 :)

标签: sqloracle

解决方案


发生这种情况是因为当有多个运算符时,运算符优先级决定了操作的顺序。执行顺序会显着影响结果值。运算符 AND 的优先级高于 OR 运算符。您希望首先考虑 OR(状态 1 和状态 2)。因此,当您将它们写在括号 () 中时,首先评估 OR 表达式而不是 AND。不存在括号将导致执行 AND 表达式。


推荐阅读