Ответ 1
Если вы имеете в виду ровно один, это NULL (который соответствует вашей существующей логике), то:
a is null != b is null
У меня есть 2 нулевых столбца CHAR
, и мне нужно проверить, является ли только один из них.
Выполнение
(a IS NULL AND b IS NOT NULL) OR (a IS NOT NULL AND b IS NULL)
скучно. И я хотел бы избежать создания для этого пользовательских функций.
Я думал о чем-то вроде
COALESCE(a, 1) + COALESCE(b, 1) = 1
но пока a
- CHAR
- он вызывает ошибку типа операнда.
Итак, любые сложные решения?
Если вы имеете в виду ровно один, это NULL (который соответствует вашей существующей логике), то:
a is null != b is null
И если вы используете PostgreSQL, не забудьте скобки...
ALTER TABLE "schema"."table" ADD CHECK ((key1 IS NULL) <> (key2 IS NULL));
(Я потратил почти 10 минут, пытаясь понять, что не так с моей ПРОВЕРКОЙ.)