[英]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.