2017-05-04 39 views
4

我在W3Schools的示例遊樂場頁面this上嘗試了以下SQL。SQL - 是否可以在何處使用別名?

SELECT CustomerID AS Id, CustomerName AS Customer 
FROM Customers 
WHERE Customer="Alfreds Futterkiste"; 

但我得到No value given for one or more required parameters.作爲迴應。 它適用於如果我使用CustomerName而不是別名。

這是遊樂場測試頁的失敗還是僅僅是不可能?

+4

'WHERE'子句在'select'之前被評估。因此'where'子句不知道你使用的別名。 – GurV

+0

不...在哪裏不允許使用別名 – scaisEdge

+0

我嘗試了這個問題的代碼片段,它在連接到的操場頁面上工作。 – Toxaris

回答

3

WHERE子句之前選擇評價方便。因此,where子句不知道您使用的別名。

所以你需要使用原始列名:

SELECT CustomerID AS Id, CustomerName AS Customer 
FROM Customers 
WHERE CustomerName="Alfreds Futterkiste"; 

如果必須在where子句中使用別名,你可以使用子查詢或CTE(矯枉過正,可能會導致更慢的查詢):

SELECT * from (
    SELECT CustomerID AS Id, CustomerName AS Customer 
    FROM Customers 
) t WHERE Customer = "Alfreds Futterkiste"; 
+1

以在where子句中使用別名「customer」。 – GurV

3

看你的代碼:

SELECT CustomerID AS Id, CustomerName AS Customer 
FROM Customers 
WHERE Customer="Alfreds Futterkiste"; 

別名customer表,你可以這樣做:

SELECT c.CustomerID AS Id, c.CustomerName AS Customer 
    FROM Customers c 
    WHERE c.CustomerName="Alfreds Futterkiste"; 

其中c現在是客戶

別名這是不可能的在where子句中使用列別名,因爲where子句在select之前執行。

+1

我認爲他們的意思是如果列別名可以使用,而不是表格。但正確的,否則。 –

+1

Gotcha,已更新回答 – RandomUs1r

+1

是Timothy G.是對的,但還是謝謝你! – Black

1

不,您不能在WHERE子句中引用列別名。

3

醜,但可以在更大,更復雜的查詢

SELECT * FROM 
(SELECT CustomerID AS ID, CustomerName AS Customer 
FROM Customers) as A 

WHERE Customer = "Alfreds Futterkiste"; 
+1

特別是如果您要在查詢的其餘部分中多次使用該參考 – HLGEM