В некоторых диалектах SQL, таких как BigQuery, есть оператор IS [NOT] TRUE|FALSE. Какой в этом смысл? Например, нельзя просто сделать val=TRUE или val!=TRUE? Какое преимущество дает нам приведенный выше оператор, если он принимает только логические входные данные?
Я вижу его полезность для чего-то вроде Databricks, где он позволяет использовать такие вещи, как '1' или 1 или 'y', но приведенное выше не кажется очень полезным. Я полагаю, что он дает ожидаемый результат для NULL? Например:
select
true is true,
false is true,
null is true
# true | false | false
x = true или x <> true приведут к результату NULL/UNKNOWN вместо TRUE/FALSE, если x имеет значение NULL/UNKNOWN, с другой стороны, x is true приведет к результату TRUE, если x имеет значение TRUE, и FALSE, когда x имеет значение FALSE или UNKNOWN.
@MarkRotteveel, какая тогда разница между x IS UNKNOWN и x IS NULL. Является ли UNKNOWN просто псевдонимом для NULL?
@ Дэвид542 Дэвид542 В принципе, да. Вы также можете спросить, почему нельзя просто использовать IS [NOT] DISTINCT FROM; Комитет по стандартизации SQL решил, что им нужна такая ясность в языке.


На этот раз полнота. У вас есть все три предиката:
x is true: проверить, истинно ли значение предиката x.x is false: проверить, является ли значение предиката x ложным.x is unknown: проверить, неизвестно ли значение предиката x.Помимо этого, в редких случаях может возникнуть необходимость различать «предикат x истинен» и «предикат x не является ложным». Обычно это происходит для предикатов фильтрации (например, предложения WHERE), которые используют первую форму, тогда как проверки ограничений используют вторую форму.
Если вы хотите реализовать какое-то нетривиальное поведение, x is true может пригодиться для ограничений.
Понятно, спасибо за этот ответ, который охватывает все это. И еще: зачем нужен оператор is unknown, если он действует так же, как is null (unknown кажется своего рода псевдонимом для null) или это означает, что это столбец, содержащий только BOOL?
Неизвестно — это истинное значение, которое представлено нулем. Это просто смысловая разница.
ок, SELECT NULL IS NULL, NULL IS UNKNOWN возвращает true, true в каждой базе данных, которую я пробовал. Ожидается ли это? Другими словами, UNKNOWN — это скорее подсказка, говорящая что-то вроде: «Мы используем это, чтобы явно указать, что это значение должно иметь тип BOOL».
«SELECT NULL IS NULL, NULL IS UNKNOWN возвращает true, true для каждой базы данных, которую я пробовал. Это ожидаемо?» -- Да, эти два выражения эквивалентны. Однако второй работает только для логических значений, а первый применим к каждому типу.
смысл
is [not] (true|false|unknown)в том, чтобы работать с трёхзначной логикой Modern-sql.com/concept/three-valued-logic#truth-value-test