Скажем, у меня есть таблица A, которая выглядит так:
ID Name IssueID
1 Bob 2
2 John Null
У меня есть справочная таблица с именем tblRef, которая включает следующие столбцы:
IssueID IssueDesc
2 Not Completed
3 Completed
Мой запрос выглядит примерно так,
Select a.Id,a.Name, I.IssueDesc from tableA a Left Join tblRef I on a.issueId =
I.IssueDesc where IssueID not in (2)
Если я это сделаю, я не увижу запись из таблицы A, где IssueID равен NULL, можно ли как-то ее подтянуть? Вернее, почему он не подтягивает запись?
NULL
"проваливается" практически во всех сравнениях. На самом деле происходит то, что результатом является NULL
, и строки отфильтровываются.
В SQL Server вам нужно проверить это явно:
where IssueID not in (2) OR IssueID is null
Помните, что семантика NULL
обычно означает «неизвестное» значение, а не «отсутствующее» значение. Когда у вас есть NULL not in (2)
, семантика «не в (2)». Результат «неизвестен», потому что значение мог равно 2.
+1 Когда вы пытаетесь сравнить неизвестное значение с любым другим значением, результат всегда неизвестен и не включается в результаты.