``in''子句在oracle中如何工作
技术问答
199 人阅读
|
0 人回复
|
2023-09-13
|
select 'true' from dual where 1 not in (null,1);( ~+ c8 P0 j# t1 X: y
当我们执行此操作时,将不会有任何结果$ M2 F! D& {' a8 h* d$ s
我的问题是:" [6 }- l7 Y6 e6 A8 w1 h
以上查询在逻辑上等效于
: v+ O" i* l' T. h3 e/ bselect 'true' from dual where 1 != null and 1 != 1;
8 A/ J' v5 H* e3 [2 y4 c; N Z就像上面的声明一样,不会有任何结果
A& L& I$ n9 K# B6 D请说清楚?6 ]4 N2 c* |: [, F2 u( s
4 |- }; {+ z( s" Z: `
解决方案:
0 A( B# d' z5 D' y4 c: Z6 d4 U 4 [ [/ p' {) Y; w: G
7 p+ Z4 D& d9 o3 i( V
% [) W1 J. h$ {7 G& g. i 正确(但请注意,这IN是一个运算符,而不是一个子句,它通常在SQL中这样工作,不仅适用于Oracle)。" t8 V/ ~+ V( x2 ^4 O6 I e# ]
where 1 not in (null,1)
7 ~ ~) |$ P: P! K9 |* c等效于:& X1 c. F( f; `8 _7 V" K' i) G
where 1 != null and 1 != 1
% p, T$ D0 { _+ s7 g% l/ D实际应该写成:
2 j! e! U# `7 \- t {9 xWHERE 1 NOT IN (NULL, 1)
4 l, B, C, V& M2 k$ k和
9 C# E7 I1 E' O2 CWHERE 1 NULL AND 1 13 k: \" a. [0 D# b& w
与以下内容相同:$ ^$ H/ F ]1 ^4 B- V
WHERE (1 NULL) AND (1 1)( O U: M9 X/ n
结果为:
& J9 G5 v. O5 u5 L/ f/ B6 e1 `WHERE UNKNOWN AND FALSE8 y$ }& e H! M* O: \8 e
并进一步作为:: w8 B5 T. }. K0 H8 e
WHERE FALSE
% a! S+ A- z7 K* p; `因此,它正确不返回任何行。) [1 [: Y" L+ J4 b- P
6 `& G) ^. Y+ j2 ?& m8 t$ g& {6 _. v
请注意,如果您有WHERE 1 NOT IN (NULL, 2),它将评估为WHERE UNKNOWN(在练习中保留),并且也不会返回任何行。 |
|
|
|
|
|