在多个子查询中使用同一个表时是否需要表别名

时间:2018-10-10 13:01:27

标签: sql

如果计划在多个子查询中使用一个表,是否需要使用其他表别名?还是我可以只在每个子查询中调用表,而它们不会因为它们在子查询中而互相干扰?

谢谢。

2 个答案:

答案 0 :(得分:0)

在任何特定的子查询中,范围内的表名称/别名是该子查询引入的名称/别名,以及外部查询 1 的任何名称和别名。

在同一“级别”引入的两个子查询不会看到彼此的名称/别名。

话虽这么说,通常最好使用唯一的名称,以减少混乱。

例如

table4

table1上的子查询无法看到table2table3table2或其别名中的任何一个,而无需将其自身引入其from子句中(在这种情况下,即使重新使用了别名,新引用也不同于外部引用。

table3t1上的子查询可以分别看到t5table2,但是t3子查询不能看到table3和{ {1}}子查询看不到t2

table5上的子查询可以引用t1t4x

实际上,表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