Stored-Procedures
解決 NOT IN NULL 問題的最佳方法是什麼?
有很多解釋為什麼 NOT IN NULL 不起作用,但我沒有看到任何解決方案。(這裡最近的問題:為什麼 NOT IN 與包含 NULL 的集合總是返回 FALSE/NULL?)
我有 6 個儲存過程的可選參數,用於過濾查詢的某個值。以前的開發人員做了這樣的事情:
IF @var1 IS NULL AND ..... select ... else select ... where value in (@var1, ...)
我不是特別喜歡這個。(查詢非常龐大),所以我決定選擇這樣的東西:(
無論如何我們在臨時表中都有結果)IF @var IS NOT NULL OR ... delete from #temp where value not in (@var1,...)
但我意識到這行不通。
我唯一能想到的就是創建另一個臨時表,該表將只保存@var1 等中的非空值(使用 if 語句或刪除 where is NULL),然後在此表上執行連接刪除。
有沒有更好的辦法?
不了解 Sybase,但在 SQL Server 中您可以這樣做。
select * from yourtable where value not in (select N from (values (@var1), (@var2), (@var3), (@var4), (@var5)) T(N) where N is not null)
如果您不能使用
values
來創建派生表,則可以union all
改用。where value not in (select N from (select @var1 union all select @var2 union all select @var3 union all select @var4 union all select @var5) T(N) where N is not null)
這應該是一樣的。
select ... from yourtable T1 JOIN ( SELECT value FROM yourtable§ EXCEPT SELECT @var1 EXCEPT SELECT @var2 EXCEPT SELECT @var3 EXCEPT SELECT @var4 EXCEPT SELECT @var5 EXCEPT SELECT @var6 ) T2 ON T1.value = T2.value where ...