Как исключить строки со значениями '0', но не строки со значениями NULL в SQL?

0

У меня есть столбец reference под моим столом. Он включает в себя значения NULL, 0 и 1. Я хочу исключить строки, содержащие 0. Кроме того, я хочу, чтобы строки со значениями NULL отображались. Я попытался сделать reference != 0 но также исключает строки с NULL значением. Как я могу это предотвратить?

Теги:

4 ответа

0
Лучший ответ

Используйте сравнения NULL сравнения. В MySQL это <=> для равенства. Итак, вы можете сделать:

where not (reference <=> 0)

В стандартном SQL это будет:

where reference is distinct from 0
  • 0
    Спасибо, это сделало работу для меня :)
4
SELECT reference FROM yourTable WHERE reference = 1 OR reference IS NULL;

Это вернет только те значения, которые вы хотите

2

NULLS - сложный beast-, вы не можете сравнить null с 0, поэтому null != 0 всегда возвращает неизвестный, который рассматривается как FALSE в вашем случае. Вместо этого вы можете указать нули в своем заявлении:

... WHERE reference IS NULL OR reference != 0

или вы можете заменить null другим значением в оценке:

... WHERE COALESCE(reference, 2) != 0
0

NULL в Базах данных представляет собой пропущенное значение, это означает, что если вы выполняете сравнение с нулем, результат всегда неизвестен.

Поэтому базы данных следуют тройной логике или трехзначной логике 3VL, поэтому логическое выражение в SQL приводит к True, false и Unknown. Поэтому, когда вы запрашиваете reference != 0 NULL не возвращаются, поскольку они вычисляются в UNKNOWN вместо TRUE

Чтобы ответить на вашу проблему, вам нужно включить обе проверки, т. select reference from tablename where reference is null or reference = 1

Поиск трехзначной логики в базах данных или обработка NULL в базах данных для получения дополнительной информации

  • 0
    Я тоже это попробовал, но reference is null возвращает те значения, которые также включают строки со значением 0 ..
  • 0
    Это проверенный запрос, и where <col_name> is null - это стандартный синтаксис SQL для сопоставления столбцов NULL. Я не вижу, почему это не будет работать

Ещё вопросы

Сообщество Overcoder
Наверх
Меню