回答

收藏

SQL逻辑运算符优先级:And and Or

技术问答 技术问答 336 人阅读 | 0 人回复 | 2023-09-14

下面的两个语句是否等效?
9 O) U/ B( T" P; p8 N: ^6 ?' z5 }6 DSELECT [...]
4 H% W5 F8 v- q9 dFROM [...]3 O) B$ j2 ~+ {3 F  c5 Y. l
WHERE some_col in (1,2,3,4,5) AND some_other_expr
( \  _) q0 w! @
, ^$ k- J) w5 a8 U  e5 G$ k! g* F$ j' V# Z( R+ _" j) x- B
SELECT [...]
) l8 P5 X, U0 ZFROM [...]7 S- I0 R$ [$ R4 \  l6 b# g7 r* V, X
WHERE some_col in (1,2,3) or some_col in (4,5) AND some_other_expr
0 o' e4 i# L  ^3 ]7 p% M& u  o  t0 T% O
我可以使用某种真值表来验证这一点吗?. O( b) a* C' M) [: w
                & O4 y1 K8 @: s" W0 f. T( U
解决方案:1 A) |- y! {. z) b4 a  s
                ( |$ g8 q, y+ y6 i

1 w! F. y' ~4 N9 N1 i* U! n* d/ d( b( L( p9 M3 d5 _/ ~( J7 c# E
                And优先于Or,因此,即使a  a1 Or a2
# D. {5 `* v) q4 H, X0 BWhere a And b
% W/ E, P! s' e% a6 T% m6 `1 [  C2 p$ f: h' w
与…不同
$ T, T; Q4 q9 wWhere a1 Or a2 And b,
! P2 J0 G, k6 B* a" I1 S; t  a$ }% G8 G2 o& A; T7 H% ]
因为那将被执行为
% B5 d2 @- d- Y& C4 ^Where a1 Or (a2 And b)  o3 J2 z3 l, X- x
- y. o6 r$ Z" @6 U0 Q) q, \
并且想要使它们相同,是以下内容(使用括号覆盖优先级规则):/ i- l7 M- T& @% h( A: E( @
Where (a1 Or a2) And b
! [8 |* E( T, n+ T8 ?% h% {, o
* I' z& y- v. q0 C这是一个示例说明:  _& o1 m9 k5 \' n* \1 o% d
Declare @x tinyInt = 1- H4 {/ l! K5 w; l
Declare @y tinyInt = 0& t4 p, Z; _6 X! p5 q$ x7 o, v
Declare @z tinyInt = 03 B0 m9 l" C, I9 L
Select Case When @x=1 OR @y=1 And @z=1 Then 'T' Else 'F' End -- outputs T) h# r. b( \9 C  p" n; K2 g) l
Select Case When (@x=1 OR @y=1) And @z=1 Then 'T' Else 'F' End -- outputs F
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则