Ответ 1
Попробуйте проверить значение NULL явно:
SELECT TOP 30 col1, col2, ..., coln
FROM Mails
WHERE (assignedByTeam <> 'team01' OR assignedByTeam IS NULL)
Как выбрать строки, которые не равны значению, а также включать нули в возвращаемые данные? Я пробовал:
SET ANSI_NULLS OFF
SELECT TOP 30 FROM Mails
WHERE assignedByTeam <> 'team01'
Я хочу вернуть строки, не имеющие "team01" в столбце assignByTeam, но мне также нужны результаты, содержащие нули. К сожалению, приведенный выше код не работает (не возвращает нули).
Я использую MS SQL Server 2008 Express.
Попробуйте проверить значение NULL явно:
SELECT TOP 30 col1, col2, ..., coln
FROM Mails
WHERE (assignedByTeam <> 'team01' OR assignedByTeam IS NULL)
SELECT TOP 30 FROM Mails
WHERE ISNULL(AssignedByTeam,'') <> 'team01'
Я видел версию оператора coalesce, но ISNULL() более эффективен.
Когда у вас много условий, набрав все, что в два раза воняет. Вот две лучшие альтернативы:
SELECT TOP 30 FROM Mails
WHERE COALESCE(assignedByTeam,'') <> 'team01'
Оператор COALESCE возвращает первое ненулевое значение в списке. Если assignByTeam не имеет значения null, он сравнивает значение назначенного значения ByTeam с командой team01. Но если assignByTeam IS null, он будет сравнивать пустую команду '' to '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 будет содержать все нулевые строки, так как они не равны "team01".
SELECT TOP 30 FROM Mails
WHERE assignedByTeam <> 'team01'
OR assignedByTeam is null
where column != 'value' or column is null