回答

收藏

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

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

下面的两个语句是否等效?9 }# o0 g0 m8 \, d$ n) T
SELECT [...]4 o4 l& [, ~( q
FROM [...]. |( D0 I" n3 `4 N4 k( o
WHERE some_col in (1,2,3,4,5) AND some_other_expr
% `/ ?& u$ _! q  g6 o8 ]8 L' x! `. D. O9 r  ^) j
$ ]; R3 {5 j+ m& ]
SELECT [...]
. a& `& t" a3 U5 _* d# B8 EFROM [...]
4 {, i2 F0 w7 [9 i( p: \2 [WHERE some_col in (1,2,3) or some_col in (4,5) AND some_other_expr
7 P/ {& _8 n5 S3 G3 [
% g( j8 X; V$ G我可以使用某种真值表来验证这一点吗?
- `4 j5 m; z, a               
4 t% ]. f3 l1 `0 ~# Z# `解决方案:- W6 ]$ K8 a% `
                  C7 Z+ h$ p: e

  _# R9 P2 G3 h4 [6 B: R
$ g- ?' n) b% D. L$ M                And优先于Or,因此,即使a  a1 Or a2; z2 h( T/ v6 J4 ~% f0 |! p+ F' g
Where a And b 9 F9 a( c& I, Y+ u  l, Q& r* ]* E

$ o* ^9 k1 M1 N) d9 M& n9 Q/ z5 e/ N与…不同
3 s3 ?) ^) a* u# U. }9 E/ OWhere a1 Or a2 And b,
+ [7 U; h2 z# u0 l5 \5 V# t7 ?3 V
因为那将被执行为; m2 b# }6 D0 n
Where a1 Or (a2 And b)# {3 H0 a5 r6 r8 t& g! _; |

9 c1 \6 `2 R4 T8 j' z并且想要使它们相同,是以下内容(使用括号覆盖优先级规则):6 R$ ^& V9 \$ H/ l( t) [7 E
Where (a1 Or a2) And b  X& T& k) s/ V
4 |8 w( d2 j+ k- }' u" E6 y- I
这是一个示例说明:
' M: o7 X, ~+ M3 K1 O5 E7 _Declare @x tinyInt = 1
0 D( }  f) f: X+ _# R, FDeclare @y tinyInt = 09 x7 B" D% o6 d; O- y. A
Declare @z tinyInt = 0
6 ]' m: t1 b1 n$ p! RSelect Case When @x=1 OR @y=1 And @z=1 Then 'T' Else 'F' End -- outputs T
2 k: P% [1 F+ {* u2 A. H- ~5 @2 DSelect Case When (@x=1 OR @y=1) And @z=1 Then 'T' Else 'F' End -- outputs F
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则