未经测试:
select least(person_1,person_2)
, greatest(person_1,person_2)
from relationships
group by least(person_1,person_2)
, greatest(person_1,person_2)
为防止出现这样的双重条目,可以使用相同的想法(测试!)添加唯一索引:
SQL> create table relationships
2 (person_1 number not null
3 , person_2 number not null
4 , relationship number not null
5 , constraint pk_relationships primary key (person_1, person_2)
6 )
7/
Table created.
SQL> create unique index ui_relationships on relationships(least(person_1,person_2),greatest(person_1,person_2))
2/
Index created.
SQL> insert into relationships values (1,2,0)
2/
1 row created.
SQL> insert into relationships values (1,3,0)
2/
1 row created.
SQL> insert into relationships values (2,1,0)
2/
insert into relationships values (2,1,0)
*
ERROR at line 1:
ORA-00001: unique constraint (RWIJK.UI_RELATIONSHIPS) violated
Regards, Rob。
你具体要允许表中的这种“重复”和查询时,只筛选出来?如果没有,那么你可能会考虑一个表格检查约束或插入/更新触发器,检查反转的主键不存在于表中。 – 2009-06-10 19:42:19
是的,我想在表中允许重复的组合,但也需要找到一个检索唯一集的最佳方法。 – 2009-06-11 04:08:21