2017-03-07 65 views
1

免责声明:我已阅读过类似的问题,这是不同的。无论订单如何,两列的唯一约束 - Oracle

我们必须创建一个飞行表“走”和“ARRIVE”项(即3个字符长(从LON飞往LAX)和距离,以及其他项目等 的主要制约因素是,该DEPART和ARRIVE对应该是唯一的,无论它们的顺序(方向无所谓) 我知道我能做些什么,但我们不允许(所以不建议):

  • 检查DEPART>到达,然后检查UNIQUE
  • 制作DEPART和ARRIVE主键(既不一起也不单独,但它不会解决它)
  • 从其他表中引用它们,它们是键。

那么如何检查表中是否存在一对呢?我得说,这不是一项工业任务,而是一个大学学科。我们使用Oracle SQLDeveloper进行该任务。 提前谢谢! 此致敬礼。

回答

4

Oracle支持索引的表达式,所以:

create index unq_t_from_to on t(least(from, to), greatest(from, to)) 

(当然,fromto是SQL关键字,所以它们不是列名非常不错的。)

+0

哦,是我不好,会编辑它(不是真正的名字) –

+0

谢谢! '在t上创建唯一的unq_t_from_to(最小(从,到),最大(从,到))' 是解决方案。自己找不到。 ty –

+0

** SUBQUESTION **我尝试了最小和最大的一个,它仍然有效。你能解释一下最不重要的事情吗(他们究竟是什么)? :) –