В поисках процессов контейнера Docker? (с точки зрения хоста)

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

Ваш первый запрос возвращает результаты, поскольку предложение WHERE оценивается как:

    3 = 1 or 3 = 2 or 3 = 3 or 3 = null
which is:
    FALSE or FALSE or TRUE or UNKNOWN
which evaluates to 
    TRUE

Второй :

    3 <> 1 and 3 <> 2 and 3 <> null
which evaluates to:
    TRUE and TRUE and UNKNOWN
which evaluates to:
    UNKNOWN

UNKNOWN не совпадает с FALSE, вы можете легко проверить его, вызвав:

select 'true' where 3 <> null
select 'true' where not (3 <> null)

Оба запроса не дадут вам результатов

Если UNKNOWN был таким же, как FALSE, то, предполагая, что первый запрос даст вам FALSE, второй должен был бы оценивать значение TRUE, поскольку он был бы таким же, как NOT (FALSE). Это не так.

В SqlServerCentral есть очень хорошая статья .

Вся проблема NULL и трехзначной логики может сначала немного сбив с толку, но для того, чтобы писать правильные запросы в TSQL

, необходимо понимать другую статью, которую я бы рекомендовал:

SQL Aggregate Functions и NULL .

30
задан Randall 26 February 2018 в 23:50
поделиться