![](/img/trans.png)
[英]LINQ-to-SQL query not returning row when where clause compares against NULL value
[英]SQL WHERE clause not returning rows when field has NULL value
好的,所以我知道這個問題:
當SET ANSI_NULLS為ON時,對空值的所有比較均得出UNKNOWN
但是,我試圖查詢一個DataTable
。
我可以添加到我的查詢:
OR col_1 IS NULL OR col_2 IS NULL
對於每列,但我的表有47列,並且我正在構建動態SQL(字符串串聯),這樣做似乎很痛苦。 還有其他解決方案嗎?
我要帶回WHERE
比較中所有具有NULL
值的行。
更新
給我帶來問題的查詢示例:
string query = col_1 not in ('Dorothy', 'Blanche') and col_2 not in ('Zborna', 'Devereaux')
grid.DataContext = dataTable.Select(query).CopyToDataTable();
(如果/當col_1 = null
和/或col_2 = null
時,不檢索行)
所以你的意思是(例如2列示例)
WHERE (col1 = 'abc' or col1 is null)
AND (col2 = 3 or col2 is null)
但是您想始終包含空值嗎? 這應該工作
WHERE isnull(col1,'abc') = 'abc'
AND isnull(col2, 3) = 3
您這樣做是因為要獲取NULL值,還是因為不想讓NULL值干擾比較?
例如,這:
WHERE col_1 != 'John'
不會返回col_1為NULL的任何行(您在問題中已表明您知道這一點)。
如果要像上面一樣通過WHERE子句返回col_1 IS NULL
行,則在MS SQL中有兩個選項(一個在mySql中)。
在MS SQL和mySql中, coalesce()
函數都允許您進行這種比較。 在MS SQL中(我相信mySql也是如此),其功能是接受兩個或更多參數,並對它們進行順序求值,並返回找到的第一個非NULL參數。 在MS SQL中,有一個叫做isNull()
的簡寫函數,它類似於coalesce()
但只需要兩個參數。
在上面的示例中,您將執行以下操作:
WHERE coalesce(col_1,'') != 'John'
並且將返回col_1 IS NULL的行以及col_1中不等於“ John”的非NULL值的行。
如果這是您的真正目標,那么此技術應該為您工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.