我正在尝试创建一个包含三列的表格:
id
paid_at
failed_at
如何确保 paid_at
仅在 failed_at
为 NULL
时才具有值?
这是我当前的代码:
CREATE TABLE charges(
id TEXT NOT NULL PRIMARY KEY,
paid_at TEXT,
failed_at TEXT
);
ALTER TABLE charges
ADD CONSTRAINT paid_at CHECK (failed_at IS NULL);
ALTER TABLE charges
ADD CONSTRAINT failed_at CHECK (paid_at IS NULL);
我还想确保 BOTH 不能为空。
我该怎么做?
谢谢!
最佳答案
您可以在检查约束中使用num_nonnulls()
:
alter table charges
add constraint only_one_not_null
check (num_nonnulls(paid_at, failed_at) = 1);
确保其中一列不为空,另一列为空。
如果您认为只有空格的字符串也为“null”,您可以将其扩展为:
alter table charges
add constraint only_one_not_null
check (num_nonnulls(nullif(trim(paid_at),''), nullif(trim(failed_at),'')) = 1);
关于sql - 如何确保 Column_A 仅在 Column_B 为 NULL 时才有值?反之亦然,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57478656/