簡體   English   中英

當字段具有NULL值時,SQL WHERE子句不返回行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM