gpt4 book ai didi

sql - 日期的唯一约束

转载 作者:行者123 更新时间:2023-12-02 04:45:52 26 4
gpt4 key购买 nike

我需要向 Oracle 数据库表添加一个唯一约束,如果其他 2 个日期列不重叠,则外键引用只能存在一次以上

例如

car_id  start_date  end_date
3 01/10/2012 30/09/2013
3 01/10/2013 30/09/2014 -- okay no overlap
3 01/10/2014 30/09/2015 -- okay no overlap
4 01/10/2012 30/09/2013 -- okay different foregin key
3 01/11/2013 01/01/2014 -- * not allowed overlapping dates for this car.

有什么建议吗?提前致谢。

最佳答案

上次我看到这个需求和解决方案时,我看到了这个:

创建一个后语句触发器。在这个触发器中像这样在你的表上做一个自连接:

select count(*)
from your_table a
join your_table b
on a.car_id = b.car_id and
(a.start_date between b.start_date and b.end_date
or
b.start_date between a.start_date and a.end_date)

如果计数为零,则一切正常。如果计数 > 0,则引发异常,语句将回滚。

OBS:这不适用于具有 > 数百万行和许多插入的表。它适用于小型查找表,或者,如果您有一个大表,则该表具有大表并且很少插入(批量插入)。

关于sql - 日期的唯一约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33230612/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com