目前我正在使用 postgres 查询来创建两个唯一索引。
每个索引由两列组成,其中检查一列的值是否为空/非空:
CREATE UNIQUE INDEX deleted_not_null_idx
ON user (ADDRESS, DELETED)
WHERE DELETED IS NOT NULL;
CREATE UNIQUE INDEX deleted_null_idx
ON user (ADDRESS)
WHERE DELETED IS NULL;
Run Code Online (Sandbox Code Playgroud)
我试图在 H2 上做同样的事情,但我在理解 H2 的语法和结构时遇到问题。
如果使用 H2 语法编写该表达式将如何形成?
如果您愿意为此目的向表添加人为的额外列,则可以制定一种解决方法来确保“行子集上的列的唯一性”。不确定这是最好的主意,但可以完成这项工作。
例如:
create table t (
address varchar(20),
deleted int,
extra_column varchar(20) as
case when deleted is null then null else address end,
constraint uq1 unique (extra_column)
);
insert into t (address, deleted) values ('123 Maple', 20);
insert into t (address, deleted) values ('456 Oak', 25);
insert into t (address, deleted) values ('456 Oak', null); -- succeeds
insert into t (address, deleted) values ('456 Oak', 28); -- fails
Run Code Online (Sandbox Code Playgroud)
结果:
select * from t;
ADDRESS DELETED EXTRA_COLUMN
--------- ------- ------------
123 Maple 20 123 Maple
456 Oak 25 456 Oak
456 Oak <null> <null>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4333 次 |
| 最近记录: |