编辑:版本8.0.20
我刚刚在学习sql,我试着去修复它,但是我做不到。我有三张table
create table order(
id_order int primary key,
order_date date
);
create delivery(
id_delivery int primary key,
delivery_date date,
cod_order int,
foreign key (cod_order) references order(id_order)
);
create purchased_product(
id_product int,
cod_order int,
return_date date,
foreign key (cod_order) references order(id_order)
primary key (id_product, cod_order)
);
这是一个简单的方案,但已经足够了。这个 return_date
必须小于 delivery_date + 30 days
我试着用 check
在 return_date
但是没有工作,所以我创建了一个视图来选择交付的产品
create view product_order_delivery(date_delivered_product) as
select date_delivery
from purchased_product P right join (select date_delivery, id_order
from order right join delivery
on order.id_order = delivery.cod_order
where date_delivery is not null) OD
on P.cod_order = OD.id_order
我又试了一次 check
在 return_date
.
有人能帮我弄明白怎么修吗?
提前感谢:)
1条答案
按热度按时间v9tzhpje1#
解决此问题的两个常见选项是:
编写触发器以确保条件为真。
编写一个用户定义的函数并在check约束中使用它。
在你的情况下,另一种方法可能就足够了。更改的定义
return_date
的确如此days_to_return
. 然后你可以用check
约束条件:当然,要获得实际日期,您需要将两个表连接起来以获取交货日期。
编辑:
这个
insert
触发器如下所示: