如果计划在多个子查询中使用一个表,是否需要使用其他表别名?还是我可以只在每个子查询中调用表,而它们不会因为它们在子查询中而互相干扰?
谢谢。
答案 0 :(得分:0)
在任何特定的子查询中,范围内的表名称/别名是该子查询引入的名称/别名,以及外部查询 1 的任何名称和别名。
在同一“级别”引入的两个子查询不会看到彼此的名称/别名。
话虽这么说,通常最好使用唯一的名称,以减少混乱。
例如
table4
table1
上的子查询无法看到table2
,table3
,table2
或其别名中的任何一个,而无需将其自身引入其from子句中(在这种情况下,即使重新使用了别名,新引用也不同于外部引用。
table3
和t1
上的子查询可以分别看到t5
和table2
,但是t3
子查询不能看到table3
和{ {1}}子查询看不到t2
。
table5
上的子查询可以引用t1
和t4x
。
实际上,表1-5中的所有表都可以是同一张表,它不影响上面的表。
FROM
子句中作为表源引入的 1 子查询通常不能引用外部查询中的任何表,除非由APPLY
引入,如果范围内的名称是来自外部查询的名称,这些名称构成了将APPLY
应用于...的结果集的一部分。
答案 1 :(得分:0)
假设表名称为table1
现在是否按如下所示编写查询
select t1.col1 from table1 t1 join table1 t2 on t1.col1=t2.col2
所以在上面我使用了自我连接,没有别名就没有办法
但如果查询如下所示
select t1.* from
(
select col1,col2 from table1 --inner query no need alias but it is a good practice to use alias
) as t1 -- here also you have to use alias which is actually outer query name