如何创建不考虑列顺序的唯一索引(设置?)
How to create unique index where column order is not taken into account (set?)
我在 table 中有两列:Object1
和 Object2
。
我想让 pair (Object1
, Object2
) 以一种不允许插入两行的方式独一无二:
Object1 = 1, Object2 = 2
Object1 = 2, Object2 = 1
您可以在表达式上创建索引,在本例中为 least()
和 greatest()
:
create unique index idx_obj1_obj2 on table(least(Object1, Object2), greatest(Object1, Object2));
注意:如果列允许 NULL
值,则有一点奇怪。在那种情况下,相同的值将只被允许一次,而不管它在哪一列。如果这确实是一个问题,可以用更复杂的表达式来解决。
我在 table 中有两列:Object1
和 Object2
。
我想让 pair (Object1
, Object2
) 以一种不允许插入两行的方式独一无二:
Object1 = 1, Object2 = 2
Object1 = 2, Object2 = 1
您可以在表达式上创建索引,在本例中为 least()
和 greatest()
:
create unique index idx_obj1_obj2 on table(least(Object1, Object2), greatest(Object1, Object2));
注意:如果列允许 NULL
值,则有一点奇怪。在那种情况下,相同的值将只被允许一次,而不管它在哪一列。如果这确实是一个问题,可以用更复杂的表达式来解决。