回答

收藏

SQL-表别名范围

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

我刚刚(昨天)学会了使用“存在”而不是“输入”。
4 h+ _0 h! F( a/ b1 z BAD
6 d# u# K# Z. U; K# } select * from table where nameid in ( : _  V8 A& i6 l
          select nameid from othertable where otherdesc =  'SomeDesc' )      
$ i6 Z) B* n+ b0 Q0 a" r GOOD
0 _9 W7 l" p# Q) j select * from table t where exists ( . U; |4 r! S  l4 i7 z) y
          select nameid from othertable o where t.nameid = o.nameid and otherdesc =  'SomeDesc' )
& z8 N' c7 m$ [5 Z8 ]) y: d我对此有一些疑问:
: j6 N2 R- `. i4 Q1)据我所知,解释是: “这样做更好的原因是,将只返回匹配的值,而不是建立大量可能的结果列表”0 G' c- `$ d# u2 |4 [9 ~' z! x
。这是否意味着虽然第一个子查询可能返回900个结果,但第二个子查询仅返回1(是或否)?
+ N# ?2 u* O% Y" X) ]1 \1 t2)过去,我曾在RDBMS中抱怨:“只能检索前1000行”,第二种方法可以解决该问题吗?/ \) t2 W9 s2 @6 z
3)第二个子查询中别名的范围是什么?…别名仅存在于括号中吗?/ |: j7 ~5 N4 }0 U3 H& o" x( t
例如1 p) {+ O2 g, l) G. G) r
select * from table t where exists (
5 W) y. M3 {. V. ?: q3 f7 ~4 r          select nameid from othertable o where t.nameid = o.nameid and otherdesc =  'SomeDesc' )      ) I; \/ {7 r; C% I; W
AND
& x6 M, U* |9 h" n& \- p9 J          select nameid from othertable o where t.nameid = o.nameid and otherdesc =  'SomeOtherDesc' )& k4 ^% u$ d# t& f5 o
也就是说,如果我使用相同的别名(对于表othertable的表为o),则在第二个“存在”中是否存在与第一个存在的任何问题?还是他们完全独立?3 W+ Z5 S$ F5 X# n7 ]
这是Oracle唯一相关的东西,还是对大多数RDBMS有效?2 @6 p# L& ]! u: q. f
非常感谢
" l  N. J/ ?9 n0 i               
; I  w- A- A0 I% H& F解决方案:# Y+ \! d4 h9 |9 a$ ~
                8 M/ g8 d, T- \/ t2 ]

  m% \- ~' |) L  w0 m! K4 O
. d: R& [9 f2 x7 E6 X                它特定于每个DBMS,并取决于查询优化器。一些优化器检测IN子句并将其翻译。
5 n! v+ q; L5 d% D, L+ z! s在我测试过的所有DBMS中,别名仅在()内部有效. q. l6 `# [1 {) F- X# t6 V1 D) I
顺便说一句,您可以将查询重写为:
5 E! c+ \3 [+ u0 U) p2 @7 rselect t.*
' y; [8 x0 E3 s' v6 y) Mfrom table t
9 g: l3 f2 y9 ]9 M# _" e8 Ljoin othertable o on t.nameid = o.nameid
  d7 H3 C% g8 R* ?9 S7 I2 j  {6 v" C    and o.otherdesc in ('SomeDesc','SomeOtherDesc');
' |) M( Y: q+ ]) _+ z$ E0 K并且,回答您的问题:
' N) M2 ?7 l+ x# ~0 n; t( Y[ol]是的
; i: x" x* d: `% B* Y% \' K* ~8 h8 w是的" ?* F* z2 M/ x9 J1 S2 v$ C
是的" S1 Z; {/ n2 z3 W  ~
[/ol]
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则