sql-server – 子查询的别名与主查询的别名相同
发布时间:2021-01-08 07:17:42 所属栏目:MsSql教程 来源:网络整理
导读:我有一个SQL查询,其别名与其子查询的一些别名相同. 例如: select *from ROOM rwhere ... ( select * from ROAD r where ... ) 这样可以正常工作,因为子查询的别名似乎隐藏了主要的别名. 在所有情况下都会这样运作吗? 我会得到不确定的结果吗? 如果可以
我有一个SQL查询,其别名与其子查询的一些别名相同. 例如: select * from ROOM r where ... ( select * from ROAD r where ... ) 这样可以正常工作,因为子查询的别名似乎隐藏了主要的别名. >在所有情况下都会这样运作吗? 解决方法嵌套子查询可以使用与父查询中使用的相同的别名,尽管对于阅读代码的人来说可能有点混乱.嵌套子查询上别名的名称空间与父项上的名称空间不同.例如,下面的查询有一个嵌套的子查询b,其中也有一个别名b.这可能会让程序员感到困惑,但对DBMS引擎来说很好:select a.foo,b.bar,b.BarCount from (select b.bar,count (*) as BarCount from BarTable b join OtherTable o on b.OtherTableID = o.OtherTableID group by b.bar) b join Foobar a on a.bar = b.bar 在相关子查询上,您可以访问父项的别名,因此别名在父查询和相关子查询中必须是唯一的.如果我们采用相关的子查询(例如下面的子查询),我们在父查询和相关子查询之间共享一个全局名称空间: select a.foo,b.bar from Foobar a join Bar b on b.FooBarID = a.FooBarID where not exists (select 1 from Bar b2 where b2.BarCategoryID = b.BarCategoryID and b2.BarDate > b.BarDate) 相关子查询没有别名,因为它不参与连接1. bar的引用b和b2都可用于子查询,因为相关子查询与父项共享其别名的命名空间. 1请注意,尽管指定的实际操作是相关子查询而不是嵌套子查询的连接,但优化器可以选择在后台使用计划中的连接运算符. (编辑:淮北站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐
热点阅读