[英]MySQL select non-NULL values with COALESCE or IFNULL in a WHERE statement
[英]SELECT Statement with NULL and Non-Null Values
我正在寫一個存儲過程,它應該能夠接受空值(tmpParameter)和非空值(smallint)。 我將如何組合邏輯,以便它可以在一個select語句中處理這兩個邏輯?
IF @tmpParameter IS NULL
SELECT [Key]
,[Parent_Key]
,[Parent_Code]
,[Code]
,[Desc]
,[Point]
,[By]
,[On]
FROM [db].[stats] t WHERE t.[Parent_Key] IS NULL
ELSE
SELECT [Key]
,[Parent_Key]
,[Parent_Code]
,[Code]
,[Desc]
,[Point]
,[By]
,[On]
FROM [db].[stats] t WHERE t.[Parent_Key]= @tmpParameter
我可以用一種方法做到這一點嗎?
我喜歡為讀者寫信。 所以我只想講清楚。 (並且索引友好。)
SELECT [Key]
,[Parent_Key]
,[Parent_Code]
,[Code]
,[Desc]
,[Point]
,[By]
,[On]
FROM [db].[stats] t
WHERE t.[Parent_Key] = @tmpParameter
OR (t.[Parent_Key] IS NULL AND @tmpParameter IS NULL)
由於t.[Parent_Key]
不能為負,因此可以使用Coalesce
強制Null
為-1,並在一條語句中進行檢查:
SELECT [Key]
,[Parent_Key]
,[Parent_Code]
,[Code]
,[Desc]
,[Point]
,[By]
,[On]
FROM [db].[stats] t
WHERE COALESCE(t.[Parent_Key], -1) = COALESCE(@tmpParameter, -1)
如果@tmpParameter
為null,則通過將兩者都強制轉換為-1,它將返回任何Null的Parent_Key
。 如果不為null,它將返回該值的任何Parent_Key
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.