Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 可空值的复杂逻辑异或_Sql_Postgresql_Postgresql 8.4 - Fatal编程技术网

Sql 可空值的复杂逻辑异或

Sql 可空值的复杂逻辑异或,sql,postgresql,postgresql-8.4,Sql,Postgresql,Postgresql 8.4,我有两个可为空的CHAR列,我需要检查其中是否只有一个为空 做 这很无聊。我希望避免为此创建自定义函数 我在想类似的事情 COALESCE(a, 1) + COALESCE(b, 1) = 1 但只要a是char,就会导致操作数类型错误 那么,有什么棘手的解决方案吗?如果您的意思是正好有一个为空(这与您现有的逻辑相匹配),那么: 如果您使用的是PostgreSQL,请不要忘记括号 ALTER TABLE "schema"."table" ADD CHECK ((key1 IS NULL) &l

我有两个可为空的
CHAR
列,我需要检查其中是否只有一个为空

这很无聊。我希望避免为此创建自定义函数

我在想类似的事情

COALESCE(a, 1) + COALESCE(b, 1) = 1
但只要
a
char
,就会导致操作数类型错误

那么,有什么棘手的解决方案吗?

如果您的意思是正好有一个为空(这与您现有的逻辑相匹配),那么:


如果您使用的是PostgreSQL,请不要忘记括号

ALTER TABLE "schema"."table" ADD CHECK ((key1 IS NULL) <> (key2 IS NULL));
altertable“schema”。“TABLE”添加检查((key1为NULL)(key2为NULL));

(我花了将近10分钟的时间试图弄明白我的支票出了什么问题。)

奇怪它这么简单:-)@zerkms:我不得不再次检查,因此快速删除/取消删除:)@mu太短了:是的,我看到它被删除了,我想知道你为什么这么做,在考虑可能的情况下pitfalls@zerkms:我陷入了事后诸葛亮的困境,不得不建立真值表以确保我不是白痴。如果
a=b
,那么
COALESCE(a,b)=COALESCE(b,a)
:)将产生不正确的值@mellamokb:值得投票表决,尽管
select coalesce(null,null)=coalesce(null,null)
返回的不是布尔值(在某些情况下可能会导致错误)
a is null != b is null
ALTER TABLE "schema"."table" ADD CHECK ((key1 IS NULL) <> (key2 IS NULL));