2015-09-22 25 views
1

考慮下面的查詢:從故意選擇或故障中查看錶別名的可見性?

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甚至x.s.word引用的表達。

來自SQL Server對我來說這是令人驚訝的。這是令人煩惱的,因爲如果在上一級別有另一個別名s,它可能會導致模糊性錯誤。看起來完全是多餘的。

此行爲是故意還是錯誤?

回答

2

在這些案件中的走樣語義確實有點靠不住的,但它是很難改變他們不破壞用戶依賴的查詢,我們的首要目標是確保現有的查詢繼續工作。

我們有計劃用我們的SQL方言來解決這些問題。敬請關注!

2

我認爲,使用點符號是一個功能這裏對這個錯誤(這仍然是可能的)

如果你想「停止」點畫,避免歧義,你應該爲各自的領域

提供明確的別名

例如,下面將失敗:

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