1
考慮以下查詢:選擇默認值時,在沒有找到記錄下
SELECT COALESCE(A, 0), COALESCE(B, 0)
FROM TABLE
WHERE Id IN (0, 2, 0);
它是如何將有可能在沒有記錄的基礎上發現的where子句返回默認值?以下是預期結果:
0, 0
1, 1
0, 0
請注意,當Id爲零時,仍然必須選擇一個值。
考慮以下查詢:選擇默認值時,在沒有找到記錄下
SELECT COALESCE(A, 0), COALESCE(B, 0)
FROM TABLE
WHERE Id IN (0, 2, 0);
它是如何將有可能在沒有記錄的基礎上發現的where子句返回默認值?以下是預期結果:
0, 0
1, 1
0, 0
請注意,當Id爲零時,仍然必須選擇一個值。
從VALUES derived table選擇並加入你的桌子上:
SELECT COALESCE(A, 0), COALESCE(B, 0)
FROM (VALUES (0),(2),(0)) x(Id)
LEFT OUTER JOIN [TABLE] ON [TABLE].Id = x.Id
如果返回的順序必須保持,你可以明確指定:
SELECT COALESCE(A, 0), COALESCE(B, 0)
FROM (VALUES (0,0),(1,2),(2,0)) x(SeqNo, Id)
LEFT OUTER JOIN [TABLE] ON [TABLE].Id = x.Id
ORDER BY SeqNo
SQL Fiddle example(沒有真正的可見變化,但排序現在爲g保證)