如何選擇不等於值並且在返回的數據中包含空值的行? 我已經試過:T-SQL:選擇不等於某個值的行,包括空值
SET ANSI_NULLS OFF
SELECT TOP 30 FROM Mails
WHERE assignedByTeam <> 'team01'
我想返回沒有「team01」在列assignedByTeam行,但我也希望包含空值的結果。不幸的是,上面的代碼不起作用(不返回空值)。
我正在使用MS SQL Server 2008 Express。
如何選擇不等於值並且在返回的數據中包含空值的行? 我已經試過:T-SQL:選擇不等於某個值的行,包括空值
SET ANSI_NULLS OFF
SELECT TOP 30 FROM Mails
WHERE assignedByTeam <> 'team01'
我想返回沒有「team01」在列assignedByTeam行,但我也希望包含空值的結果。不幸的是,上面的代碼不起作用(不返回空值)。
我正在使用MS SQL Server 2008 Express。
嘗試明確檢查NULL:
SELECT TOP 30 col1, col2, ..., coln
FROM Mails
WHERE (assignedByTeam <> 'team01' OR assignedByTeam IS NULL)
where column != 'value' or column is null
''='在大多數SQL方言中都有效嗎? – MarioDS
@MarioDeSchaepmeester:是的。 –
SELECT TOP 30 FROM Mails
WHERE assignedByTeam <> 'team01'
OR assignedByTeam is null
當你有很多的條件,打字一切太臭了兩次。這裏有兩個更好的選擇:
SELECT TOP 30 FROM Mails
WHERE COALESCE(assignedByTeam,'') <> 'team01'
COALESCE運算符返回列表中的第一個非空值。如果assignedByTeam不爲null,則它會將assignedByTeam值與'team01'進行比較。但是如果assignedByTeam爲null,它將比較一個空白的''到'team01'。它基本上簡寫如下:
SELECT TOP 30 FROM Mails
WHERE (CASE WHEN assignedByTeam IS NULL THEN '' ELSE assignedByTeam END) <> 'team01'
第二種方法是使你的病情的條件,例如:
SELECT TOP 30 FROM Mails
WHERE 1 = CASE WHEN assignedByTeam = 'team01' THEN 0 ELSE 1 END
在這個例子中,ELSE值將包括所有的空行,因爲他們AREN不等於'team01'。
如果我可以爲此投兩次票,我會的。 – Matt
得到我的投票。豎起大拇指。 – MikeJRamsey56
SELECT TOP 30 FROM Mails
WHERE ISNULL(AssignedByTeam,'') <> 'team01'
我看到一個coalesce語句版本,但ISNULL()更有效。
這是我認爲最優雅的解決方案。 – Amarundo
+1這是布爾邏輯的美妙之處。 – JonH
嗯,是的,但我認爲這樣做有一個簡短的方法,就像一個命令,而不是寫一些命令。無論如何,感謝您的努力! – Val
@ValCool:在SQL標準中有一個稱爲「IS DISTINCT FROM」的操作符,但SQL Server不支持它。 MySQL有非標準的空值安全的相等運算符'NOT a <=> b',但是SQL Server也不能這樣做。 –