2015-10-05 81 views
0
select ISNULL(c.name,'any') from (select Name from Orders where ID = '123') 

select ISNULL((select Name from Orders where ID = '123'),'any') 

Orders表有兩列MSSQL ISNULL查詢

1. ID 
2. Name 

和數據的訂單是

ID Name 
121 abc 
124 def 

第一個查詢沒有返回任何結果,而第二個查詢提供任何作爲結果。有什麼區別

回答

1

第一種形式使用子查詢作爲表源,在其FROM子句中;它可以在零和許多行之間返回。

對於子查詢返回的每一行,將計算ISNULL表達式。但是,如果子查詢沒有返回任何行,那麼最終輸出不包含行。

第二種形式使用SELECT而沒有FROM子句 - 它將始終生成一個結果集,其中只包含一行。然後,它還使用標量子查詢(通過在預計標量值的位置引入子查詢) - 必須產生零個或一個結果。如果子查詢產生零結果,則替換NULL


所以,兩者的區別在於,第一查詢可以零和多行之間返回,並且每行的ISNULL表達式。第二個查詢總是隻生成一行,而如果子查詢返回多個結果,則會產生錯誤。