考虑以下问题:
select
s.word
,s.word
,x.word
,x.s.word
from (select
s.word
from publicdata:samples.shakespeare s
where corpus = '1kinghenryiv') x
order by
word
事实证明,如果一个人不在子选择中应用别名,那么不仅可以使用word
和x.word
来引用表达式,还可以使用s.word
甚至{ {1}}。
来自SQL Server这对我来说是令人惊讶的。这很烦人,因为如果在上层有另一个表别名,它可能会导致歧义错误。它似乎完全是多余的。
这种行为是故意还是错误?
答案 0 :(得分:2)
我认为使用点符号是这里的一个特征与bug(仍然可能)
如果你想"停止"点链并避免歧义你应该为各个字段提供显式别名
例如,下面将失败:
select
word
,s.word
,x.word
,x.s.word
from (select
s.word AS SWORD -- << added alias
from publicdata:samples.shakespeare s
where corpus = '1kinghenryiv') x
order by word
答案 1 :(得分:2)
在这些情况下,别名语义确实有点不稳定,但如果不破坏用户所依赖的查询就很难改变它们,我们的主要目标是确保现有查询继续有效。
我们确实计划用我们的SQL方言解决其中一些问题。请继续关注!