У меня есть столбец reference
под моим столом. Он включает в себя значения NULL
, 0
и 1
. Я хочу исключить строки, содержащие 0
. Кроме того, я хочу, чтобы строки со значениями NULL
отображались. Я попытался сделать reference != 0
но также исключает строки с NULL
значением. Как я могу это предотвратить?
Используйте сравнения NULL
сравнения. В MySQL это <=>
для равенства. Итак, вы можете сделать:
where not (reference <=> 0)
В стандартном SQL это будет:
where reference is distinct from 0
SELECT reference FROM yourTable WHERE reference = 1 OR reference IS NULL;
Это вернет только те значения, которые вы хотите
NULLS
- сложный beast-, вы не можете сравнить null с 0, поэтому null != 0
всегда возвращает неизвестный, который рассматривается как FALSE
в вашем случае. Вместо этого вы можете указать нули в своем заявлении:
... WHERE reference IS NULL OR reference != 0
или вы можете заменить null другим значением в оценке:
... WHERE COALESCE(reference, 2) != 0
NULL в Базах данных представляет собой пропущенное значение, это означает, что если вы выполняете сравнение с нулем, результат всегда неизвестен.
Поэтому базы данных следуют тройной логике или трехзначной логике 3VL, поэтому логическое выражение в SQL приводит к True, false и Unknown. Поэтому, когда вы запрашиваете reference != 0
NULL не возвращаются, поскольку они вычисляются в UNKNOWN вместо TRUE
Чтобы ответить на вашу проблему, вам нужно включить обе проверки, т. select reference from tablename where reference is null or reference = 1
Поиск трехзначной логики в базах данных или обработка NULL в базах данных для получения дополнительной информации
reference is null
возвращает те значения, которые также включают строки со значением 0 ..
where <col_name> is null
- это стандартный синтаксис SQL для сопоставления столбцов NULL. Я не вижу, почему это не будет работать