H2 - 创建具有两列的唯一索引
H2 - Create unique index with two columns
目前我正在使用 postgres 查询创建两个唯一索引。
每个索引由两列组成,其中检查一列的值是否为 null/not null:
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;
我正尝试在 H2 上做同样的事情,但我在理解 H2 的语法和结构时遇到问题。
如果使用 H2 语法编写,这个表达式将如何构成?
如果您愿意为 table 添加一个人为的额外列,则可以制定出确保 "uniqueness of the columns on a subset of rows" 的解决方法,只是为了这个目的。不确定这是不是最好的主意,但可以胜任。
例如:
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
结果:
select * from t;
ADDRESS DELETED EXTRA_COLUMN
--------- ------- ------------
123 Maple 20 123 Maple
456 Oak 25 456 Oak
456 Oak <null> <null>
目前我正在使用 postgres 查询创建两个唯一索引。
每个索引由两列组成,其中检查一列的值是否为 null/not null:
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;
我正尝试在 H2 上做同样的事情,但我在理解 H2 的语法和结构时遇到问题。
如果使用 H2 语法编写,这个表达式将如何构成?
如果您愿意为 table 添加一个人为的额外列,则可以制定出确保 "uniqueness of the columns on a subset of rows" 的解决方法,只是为了这个目的。不确定这是不是最好的主意,但可以胜任。
例如:
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
结果:
select * from t;
ADDRESS DELETED EXTRA_COLUMN
--------- ------- ------------
123 Maple 20 123 Maple
456 Oak 25 456 Oak
456 Oak <null> <null>