我將標識存儲在varbinary(max)字段中。我正在尋找的是說,一個SQL語句,有條件的SQL where子句
select logo where customerid=5
但如果特定客戶ID標識爲NULL,那麼,
select logo where customerid=18
這是默認的標誌。如果可能,我想在單個查詢中執行此操作。這可以做到嗎?謝謝。
我將標識存儲在varbinary(max)字段中。我正在尋找的是說,一個SQL語句,有條件的SQL where子句
select logo where customerid=5
但如果特定客戶ID標識爲NULL,那麼,
select logo where customerid=18
這是默認的標誌。如果可能,我想在單個查詢中執行此操作。這可以做到嗎?謝謝。
SELECT COALESCE(b.logo, dflt.logo) AS logo
FROM mytable dflt
LEFT OUTER JOIN mytable b ON b.customerid=5
WHERE dflt.customerid=18
我認爲我們的答案都能奏效,但我很想知道我們哪個答案表現更好......一方面,我對加入表示懷疑。另一方面,我喜歡使用coalesce,我不確定我的IN()+ ORDER BY CASE會更好,尤其是那些不適合索引但適合連接的條件。 –
此外,你的移動性更強,你不必在TOP 1,LIMIT 1等之間進行轉換。 –
是的,我沒有MS SQL Server,所以我無法測試哪個性能更好。如果customerid是主鍵(或集羣鍵),那麼我認爲它會非常有效地匹配1或2行,所以任何一種解決方案都會很快。 –
SELECT TOP 1 logo
FROM [Table]
WHERE logo is not null and customerid IN (@CustomerID, 18)
ORDER BY CASE WHEN customerid= 18 THEN 1 ELSE 0 END
請注意我是如何處理訂單的。我懷疑你可能有一些ID爲< 18的客戶和一些id> 18的客戶,所以你需要在這裏小心。
哪種數據庫類型?這將改變答案 –
這是MSSQL,不確定爲什麼我的問題從「如果它爲空」更改爲「如果該customerid不存在」,customerid確實存在,但他們可能沒有添加徽標,離開領域null – Greg
修復了您的編輯問題。 –