You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PostgreSQL中设置NAND约束

你需要的NAND逻辑对应到字段约束的规则是:禁止两个字段同时非空,允许都为空、仅单个字段有值,对应的CHECK约束有两种等价的实现写法:
第一种是直接对应语义的直观写法,明确表达“不能同时不为空”的规则:

ALTER TABLE foo
  ADD CONSTRAINT check_status
  CHECK (NOT (refused_at IS NOT NULL AND requested_at IS NOT NULL));

第二种是经德摩根定律转换后的等价写法,可读性同样很高:

ALTER TABLE foo
  ADD CONSTRAINT check_status
  CHECK (refused_at IS NULL OR requested_at IS NULL);

你之前写的(refused_at IS NULL) <> (requested_at IS NULL)属于异或逻辑,要求两个字段的空值状态必须不同,也就是必须恰好有一个字段非空,不允许两个都为空的情况,因此不符合你需要的NAND规则。

内容的提问来源于stack exchange,提问作者DevonDahon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 03:18:01