T-SQL: выберите строки, не равные значению, включая нули - программирование
Подтвердить что ты не робот

T-SQL: выберите строки, не равные значению, включая нули

Как выбрать строки, которые не равны значению, а также включать нули в возвращаемые данные? Я пробовал:

SET ANSI_NULLS OFF
SELECT TOP 30 FROM Mails
WHERE assignedByTeam <> 'team01'

Я хочу вернуть строки, не имеющие "team01" в столбце assignByTeam, но мне также нужны результаты, содержащие нули. К сожалению, приведенный выше код не работает (не возвращает нули).

Я использую MS SQL Server 2008 Express.

4b9b3361

Ответ 1

Попробуйте проверить значение NULL явно:

SELECT TOP 30 col1, col2, ..., coln
FROM Mails
WHERE (assignedByTeam <> 'team01' OR assignedByTeam IS NULL)

Ответ 2

SELECT TOP 30 FROM Mails
WHERE ISNULL(AssignedByTeam,'') <> 'team01'

Я видел версию оператора coalesce, но ISNULL() более эффективен.

Ответ 3

Когда у вас много условий, набрав все, что в два раза воняет. Вот две лучшие альтернативы:

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".

Ответ 4

SELECT TOP 30 FROM Mails
WHERE assignedByTeam <> 'team01'
OR assignedByTeam is null

Ответ 5

 where column != 'value' or column is null