``in''子句在oracle中如何工作
技术问答
198 人阅读
|
0 人回复
|
2023-09-13
|
select 'true' from dual where 1 not in (null,1);
/ z5 M: h+ F6 a当我们执行此操作时,将不会有任何结果
2 ~0 y8 v- Z% ~$ H1 F2 _8 v" q7 U我的问题是:6 S) A2 y Y7 b! |6 x! |; M
以上查询在逻辑上等效于
/ x9 Z$ y, O5 F; q* Zselect 'true' from dual where 1 != null and 1 != 1;- N' m2 }( c+ ^7 G
就像上面的声明一样,不会有任何结果3 `+ X# [! F# m2 |' Y4 M" B
请说清楚?
% S9 @" M5 v$ X+ x& @ 8 e( q1 P: e' _3 K5 E
解决方案:4 s) M1 a# @: [0 o0 m
S, B; a/ T4 |8 _! {" C0 R: [" a8 U, e/ w: q4 E
0 a3 n9 t$ ]! u" a6 k& P; M; \ 正确(但请注意,这IN是一个运算符,而不是一个子句,它通常在SQL中这样工作,不仅适用于Oracle)。
6 r! R7 d, f* L; I! ?where 1 not in (null,1)
9 k) y. H: i$ i! V7 B7 i$ z等效于:- v5 P. O9 Y i( a+ u
where 1 != null and 1 != 1
$ ]# x! R' i' B l" u实际应该写成:
. q% k! f d: E7 ^9 jWHERE 1 NOT IN (NULL, 1)* }2 z9 G! F; @0 p
和
M- n% W, N% G4 @1 Y5 hWHERE 1 NULL AND 1 1
: b" l' w4 T' \1 r$ p+ A' P" p$ }与以下内容相同:2 Q3 H; N0 r4 F4 l, _$ Q
WHERE (1 NULL) AND (1 1)
: g, x: f. I) I$ m% Q1 b结果为:* ]/ k6 I. d! I: Y
WHERE UNKNOWN AND FALSE
* U& N/ o. }" I6 y( O并进一步作为:) W0 w6 U& B( _7 ^
WHERE FALSE' Y9 S4 ~+ U! _; h7 ]' d0 U2 a1 o7 b! @
因此,它正确不返回任何行。
4 b$ H/ \6 W7 \$ c8 ]
/ m* Y1 |% w& B1 c. [0 m请注意,如果您有WHERE 1 NOT IN (NULL, 2),它将评估为WHERE UNKNOWN(在练习中保留),并且也不会返回任何行。 |
|
|
|
|
|