无论顺序如何,两列的唯一约束
Unique constraint on two columns irrespective of order
我有一个很简单的 table:
id | name | alternate
--------+--------+------------
1 | Joe | Joseph
--------+--------+------------
2 | Pete | Peter
--------+--------+------------
等等。
我想在名称和备用列上添加约束,但不考虑顺序。例如,我不想插入 (3, 'Peter', 'Pete')
,因为它与 id 2 基本相同,只是列颠倒了。
有办法吗?
创建唯一索引:
CREATE UNIQUE INDEX ON atable
(LEAST(name, alternate), GREATEST(name, alternate));
您可以创建唯一索引:
create unique index my_unique_idx
on mytable(least(name, alternate), greatest(name, alternate));
create table mytable (name varchar(10), alternate varchar(10));
create unique index my_unique_idx
on mytable(least(name, alternate), greatest(name, alternate));
insert into mytable values('foo', 'bar');
-- 1 rows affected
insert into mytable values('bar', 'foo')
-- ERROR: duplicate key value violates unique constraint "my_unique_idx"
-- DETAIL: Key (LEAST(name, alternate), GREATEST(name, alternate))=(bar, foo) already exists.
我有一个很简单的 table:
id | name | alternate
--------+--------+------------
1 | Joe | Joseph
--------+--------+------------
2 | Pete | Peter
--------+--------+------------
等等。
我想在名称和备用列上添加约束,但不考虑顺序。例如,我不想插入 (3, 'Peter', 'Pete')
,因为它与 id 2 基本相同,只是列颠倒了。
有办法吗?
创建唯一索引:
CREATE UNIQUE INDEX ON atable
(LEAST(name, alternate), GREATEST(name, alternate));
您可以创建唯一索引:
create unique index my_unique_idx
on mytable(least(name, alternate), greatest(name, alternate));
create table mytable (name varchar(10), alternate varchar(10));
create unique index my_unique_idx
on mytable(least(name, alternate), greatest(name, alternate));
insert into mytable values('foo', 'bar');
-- 1 rows affected
insert into mytable values('bar', 'foo')
-- ERROR: duplicate key value violates unique constraint "my_unique_idx"
-- DETAIL: Key (LEAST(name, alternate), GREATEST(name, alternate))=(bar, foo) already exists.