簡體   English   中英

具有別名表名稱的兩個查詢“ select語句”之間的區別

[英]Difference between two queries 'select statement' with alias table name

我想問一下這兩個查詢之間的區別:

select ProductName = case when p.ProductID is null then 'Unknown' else p.ProductName end

select p.ProductName = case when p.ProductID is null then 'Unknown' else p.ProductName end

(p是表Product的別名)

在sql server management studio 2008 R2中它們之間有什么區別? 當我執行第一個腳本時,它已成功執行,但是對於第二個腳本,我收到一條錯誤消息“'='附近的語法不正確”。

有人可以向我解釋一下嗎? 謝謝。

在第一種情況下, ProductName不是表列,而是別名 這樣想:

select case when p.ProductID is null then 'Unknown' else p.ProductName end as ProductName

在第二個不正確的查詢中,您試圖做一些非法的事情,因為您試圖同時從表中選擇一列並分配給它,就像它是從表達式生成的別名一樣。

我認為您的困惑是您認為ProductName始終是一列,因為在該表中有一個具有該名稱的列,但是在這種情況下ProductName 不是列名; 它是case語句結果的別名 因此,當您嘗試使用p.ProductName您要告訴SQL引擎從p表中選擇ProductName列,然后嘗試分配一個case語句,就好像它是一個別名(不在p.ProductName上下文中) 。

您可以輕松地為case語句使用任何名稱,因為它是別名。 你可以做:

select DerivedProductName = case when p.ProductID is null then 'Unknown' else p.ProductName end

該示例是否更清楚地表明您在使用這種語法時不會處理列名?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM