Подтвердить что ты не робот

Tricky логический XOR для значений с нулевым значением

У меня есть 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 - он вызывает ошибку типа операнда.

Итак, любые сложные решения?

4b9b3361

Ответ 1

Если вы имеете в виду ровно один, это NULL (который соответствует вашей существующей логике), то:

a is null != b is null

Ответ 2

И если вы используете PostgreSQL, не забудьте скобки...

ALTER TABLE "schema"."table" ADD CHECK ((key1 IS NULL) <> (key2 IS NULL));

(Я потратил почти 10 минут, пытаясь понять, что не так с моей ПРОВЕРКОЙ.)