如果此簡單查詢返回無結果(NULL),則它在一行中返回零,這是正確的。如果有一些結果,查詢返回錯誤512.SQL返回值如果不爲空,則返回零,如果爲空
如何修改它返回值,如果找到和「0」,如果不是?
select ISNULL((select Name from NAMES
left join ADDRESS on NAMES.Name = ADDRESS.Person
where
NAMES.Name = myinput
) , 0) as Name
如果此簡單查詢返回無結果(NULL),則它在一行中返回零,這是正確的。如果有一些結果,查詢返回錯誤512.SQL返回值如果不爲空,則返回零,如果爲空
如何修改它返回值,如果找到和「0」,如果不是?
select ISNULL((select Name from NAMES
left join ADDRESS on NAMES.Name = ADDRESS.Person
where
NAMES.Name = myinput
) , 0) as Name
好吧,如果你的內部查詢返回不止一個值,你應該得到一個錯誤,因爲isnull
只能處理一個值。 我建議使用不同的方法。該代碼是長,但它會給你用任意數量的查詢返回的行正確的結果:
;WITH CTE AS
(
SELECT Name
FROM NAMES
LEFT JOIN ADDRESS ON NAMES.Name = ADDRESS.Person
WHERE NAMES.Name = @myinput
)
SELECT Name
FROM CTE
UNION ALL
SELECT '0'
WHERE NOT EXISTS(SELECT 1 FROM CTE)
使用你的內部查詢的CTE讓我把它寫一次。
使用NOT EXISTS
會導致union
中的第二個查詢僅返回0
,此時cte不返回任何結果。否則,你會得到cte的結果。
裹主查詢到CTE現在
with q as(
select Name
from NAMES
left join ADDRESS on NAMES.Name = ADDRESS.Person
where
NAMES.Name = myinput
)
select Name
from q
union all
select '0'
where not exists(select 1 from q);
嘗試更換一個號碼'0'用字符串''0''。 – krokodilko
如果有多個名稱沒有匹配的地址,應該返回什麼?如果某些名稱具有匹配的地址並且某些名稱不匹配,應該返回什麼? – kirodge
這是因爲您使用子查詢作爲表達式,因此不允許返回多個值嘗試使用IIF代替 –