表别名的可见性是故意还是错误的子选择?

时间:2015-09-22 15:10:26

标签: google-bigquery

考虑以下问题:

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

事实证明,如果一个人不在子选择中应用别名,那么不仅可以使用wordx.word来引用表达式,还可以使用s.word甚至{ {1}}。

来自SQL Server这对我来说是令人惊讶的。这很烦人,因为如果在上层有另一个表别名,它可能会导致歧义错误。它似乎完全是多余的。

这种行为是故意还是错误?

2 个答案:

答案 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方言解决其中一些问题。请继续关注!