回答

收藏

IN运算符SQL

技术问答 技术问答 64 人阅读 | 0 人回复 | 2023-09-13

我有一个名为NUMS的表,其中只有n列。$ D: O* Z9 B& X" X3 l# N* E* |! |
然后在其中填充值1,2,3,4,5,null。
4 L! X. ?0 Y6 z( e" M现在查询0 f# U8 v# x) E! i/ v" L
SELECT n FROM Nums
- v. s  l. r" J5 K  k% o* a WHERE n IN (1, 2, null)
* M) G6 w( x# d在这种情况下,我想它已转换为+ ?5 ]' D% {5 q0 T: h! o4 \
SELECT n FROM Nums + \  y6 S1 C/ |" S( s6 K
Where n = 1 OR n = 2 OR n = null$ {9 _, r2 V; ~
我也在比较n和一个应该产生未知值的null值,它应该返回一个空集。但是它返回1,2(null不返回,尽管包含在IN运算符中); V* J/ B) ?8 N3 {: z/ }  a1 y
现在查询. g( ~; b6 ?. {: l& V7 N$ B
SELECT n FROM Nums WHERE n NOT IN(1, 2, null)
2 O8 ~# p0 _/ g- U6 R% C. K3 Z…转换为:
0 `* x% s% r2 D- ESELECT n FROM Nums ; n7 D6 f! B& ^
Where n!=1 AND n!=2 AND n!=null& y9 V/ ~, y0 @; \5 t
在这里,我上面所说的有效,并且不返回任何内容。
% J! }8 ?6 `2 M' Q* }& @任何人都可以详细解释发生了什么。
( ]4 l" e/ j, {                . b' k+ ]  x/ z$ R! f/ g
解决方案:
+ u. u3 d4 ^5 _3 ~: M2 K               
; H/ y" s, c# h( b) x8 k) _1 v7 K# I) s  {  r

- L3 k  e, I: _7 o                好,我找到了答案2 ]2 v1 P2 S/ O! [  @7 f" S$ y
SELECT n FROM Nums   
$ b. d3 K! ?% p9 H7 d+ X9 d' jWHERE n NOT IN (1, 2, null)
. `! H1 r( Q1 Q# e, w评估为4 u9 W/ P$ z  f7 ^9 G; y0 x4 o' L
SELECT n FROM Nums  0 {. L- R6 s/ I; D1 y1 ^# r
n!=1 AND n!=2 AND n!=null
, Z+ V8 }, L! h, Q+ B上次比较的结果将永远是未知的。, |: o4 f# I" Y/ R7 h1 V) D7 M
AND的真值表显示,只要其中一个未知数(U,T)(U,F),(U,U)被引用,结果就只能是U或F(U =未知,F =False)因此,它不会包含在结果集中。
. O/ A" l) Q2 d8 C0 V+ Q的情况下' D) y/ ^$ N* c9 c' {' d
SELECT n FROM Nums( p" u: S& T0 S* n( n
WHERE n IN (1, 2, null)( t+ i) |' g2 P6 b! q$ A
等于
3 Y6 E" V0 B; V$ c  O" A4 H: QSELECT n FROM Nums
" L/ Q  A3 C7 J* S* pWHERE n = 1 OR n =2 OR n=null
7 u# H+ B8 S9 }( U' G$ n现在对于n = 1的行,操作n = 1将变为true  ,对于n = 2的行,操作n = 2  将变为true,并且对于所有行n = null将是未知的( K1 |% y! b1 U2 s* \8 O
因此,它在结果集中给出1和2。
8 V+ `4 c  h, |" ^希望大家喜欢。( s  k$ }7 {( i; X$ X$ C2 }4 L
任何人都可以将我的回复标记为答案
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则