回答

收藏

NOT IN vs IN不返回免费结果

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

嗨,我正在研究sql
: N4 P5 X2 D$ U, Lzoo教程中的示例#7:SELECT中的SELECT。在以下问题中4 y. G" h' Q9 ]7 K
“查找属于一个总人口少于2500万的大洲的每个国家。请显示名称,大洲和人口。”
- q& k0 h2 R. D$ ]7 R. A6 a+ O8 l通过使用NOT IN和类似这样的子查询,我得到了正确的答案:0 v; S6 |; q  b% x& ~0 m, A
SELECT name, continent, population FROM world
, _  ~) Y% Z! |6 XWHERE continent NOT IN (! R  G+ I* l+ d
    SELECT continent FROM world
  N$ j3 x7 m# f( r0 a5 L% O. }    WHERE population > 25000000)9 u6 H* }( N) i# e9 {
另一方面,如果我使用“ IN”而不是“ NOT
, H. y; f0 f3 J1 Q7 Q8 n8 `( SIN”和“人口
- z) V0 e9 ?+ F& D; v                9 e4 e- l4 V0 C+ c& ^" ?1 c) @
解决方案:
8 ]9 ^% s4 A% Z' U: m                  }- L* ]) _( M$ z4 ^  W
' a* j9 T! Y) r9 p+ V% {

" s7 j+ V2 f/ O9 q$ {9 g; S                如果我没看错,这个问题会要求列出一个大陆上每个国家人口少于2500万的每个国家,对吗?, X: O% C4 E7 _: K2 o/ _. T) ~
如果是,请查看您的子查询:
( F" l' w" z2 {% h6 ?- tSELECT continent FROM world1 ?& E7 k; Y: ^4 s$ V  C' b
WHERE population > 25000000
' {. g9 \' r8 X* s4 n您正在拉动至少一个拥有超过2500万人口的国家/地区的大洲,因此将其排除在外是行之有效的原因。7 r1 g3 Z' d, X& |; e
示例:欧洲大陆有5个国家,其中四个很小,但是其中一个国家查理拥有5000万人口。9 M0 x, }9 c6 K3 H. o
因此,您的子查询将返回Continent Alpha,因为国家Charlie符合人口>
  l& i* n% i: a% }; K0 C25000000的约束。此子查询将查找您不需要的所有内容,这就是使用not in可以工作的原因。+ q3 H+ N( n' o
另一方面:
+ E: Y2 k9 w* w: {+ T8 qSELECT continent FROM world5 L. }$ l# E9 O) r
WHERE population > 250000001 g" D5 ^2 d- m5 o3 l. `
如果ANY国家/地区低于2500万,则将显示您不想要的大陆,因为您希望每个国家/地区都在下方。) f: m; u+ t3 X% n9 C4 t
示例:来自四个小国家的欧洲大陆。这四个值都在25000000以下,因此无论Country Charlie是否拥有50000000,它们都会由您的子查询返回。
/ Z7 d4 o, T9 @6 P( \显然,这不是解决问题的最佳方法,但这就是第一个查询有效而第二个查询无效的原因。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则