你有在這種情況下使用別名。
否則服務器無法區分一個boys.boy
從另一個,而這個建築
length(boy) > length(boy)
是相當不明確的 - 因爲它可以解釋爲
length(b1.boy) > length(b2.boy)
或
length(b2.boy) > length(b1.boy)
或甚至
length(b1.boy) > length(b1.boy)
更新
考慮一個簡單的片段(這裏用T-SQL):
declare @boys table (boy nvarchar(128))
insert into @boys
select 'Ed'
union
select 'Tom'
union
select 'Nick'
select b1.boy, b2.boy
from @boys as b1
left outer join @boys as b2 on len(b1.boy) > len(b2.boy)
select b1.boy, b2.boy
from @boys as b1
left outer join @boys as b2 on len(b2.boy) > len(b1.boy)
從第一個查詢輸出將
Ed NULL
Nick Ed
Nick Tom
Tom Ed
而且從第二個:
Ed Nick
Ed Tom
Nick NULL
Tom Nick
說明:
讓我們來看看第一個查詢。基本上是:「從表中取出所有記錄,並將每條記錄與長度小於該記錄的所有其他記錄結合起來」。這就是爲什麼當得到Ed, Null
對 - 沒有名稱長度的記錄少比Ed
有。
但在第二個查詢條件是「從表中取出所有記錄並將每條記錄與長度爲男孩名稱的所有其他記錄相結合」大於比該記錄具有「。這就是爲什麼我們在這種情況下獲得配對Ed, Nick
和Ed, Tom
。
你甚至想要實現什麼? – musefan
@musefan:我試圖理解他們爲什麼建立這樣的語言。我確信這有一些目的,但我不明白。 :) – codepleb