编辑:8.0.20版本
我现在正在学习sql,我试图修复它,但我做不到。 我有三张桌子
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)
);
这是一个比较容易的计划,但已经足够了。 code>return_date必须小于delivery_date+30天
我试图对return_date
使用check
,但没有工作,因此我创建了一个视图,仅选择已交付的产品
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
上再次尝试。
有人能帮我弄明白怎么修吗?
提前感谢:)
解决这一问题的两种常见选择是:
对于您的情况,另一种方法可能就足够了。 更改return_date
的定义,使其为days_to_return
。 然后可以使用check
约束:
check (days_to_return between 0 and 30)
当然,要获得实际日期,您将需要连接这两个表来获取交付日期。
编辑:
insert
触发器如下所示:
delimiter $$
create trigger trig_purchased_product_return_date
before insert on purchased_product
for each row
begin
select @delivery_date = delivery_date
from delivery d
where d.cod_order = new.cod_order;
if new.return_date < @delivery_date or new.return_date > @delivery_date + interval 30 day then
signal sqlstate '45000' set message_text = 'invalid return_date'
end if
end;
delimiter ;
问题内容: 是否有与SQL Server 2008类似的东西?我想使用当前的年份和月份创建日期,但是要使用自己的月份。为了在计算列公式中使用它,需要一行完成。 例如(我不确定是否有效,因为我没有SQL Server 2012): 在SQL Server 2008中有没有办法做到这一点? DATEFROMPARTS似乎仅在SQL Server 2012中可用(链接) 问题答案: 使用示例中的,您可以
问题内容: 假设我要将数千天存储在一个表中,如何从日历中检索它? 问题答案: 这是您可以在SQL Server中使用的通用脚本。只需修改开始和结束日期: 如果您想要更高级的日历,可以在网上找到:
问题内容: 好吧,假设我有一个看起来像这样的表: 任何人都有关于如何查询它的想法,因此数据看起来像 问题答案: 我不会将ID放在这里,因为我认为它与查询无关。如果您愿意,请稍后再说。这是一个MSSQL查询。 可以很容易地将其翻译为其他数据库类型。
问题内容: tl; dr:我想在Redshift中生成一个日期表,以使报表更易于生成。最好不需要在Redshift中已经有大表,而需要上传一个csv文件。 长版:我正在处理一份报告,其中我必须平均一周中每天创建的新项目。日期范围可能跨越数月或更长时间,因此可能有5个星期一,但只有4个星期日,这可能会使数学有些棘手。另外,我不能保证每天都有一个实例,尤其是一旦用户开始切片数据时。其中,这是BI工具的
如果表已经存在,如何检查TarantoolSQL?
问题内容: 我希望这是关于如何使用SQL语句检查SQL Server 2000/2005中是否存在表的最终讨论。 当您用Google搜索答案时,会得到很多不同的答案。有官方/后向和向前兼容的方式吗? 这是两种可能的方法。两种方法中的哪一种是标准/最佳方法? 第一种方式: 第二种方式: MySQL提供的简单 陈述。我正在寻找类似的东西。 问题答案: 对于此类查询,最好始终使用INFORMATION_
问题内容: 在MySQL中可以做 什么是SQL Server等效项? 问题答案: 在SSMS中,右键单击表节点,然后单击“脚本表为” /“创建”。 没有内置的“此表脚本” T-SQL。 sp_help’tablename’会提供有用的表信息。
问题内容: 如何查询SQL Server的SQL Server 2005表列的创建日期? 我尝试获取该信息,但是创建日期未包含在此存储过程中。 如何才能做到这一点? 问题答案: 有一个名为sys.Columns的系统表,您可以从中获取列信息。如果要查看特定表的列,可以执行以下操作: 或者,您可以获取如下表信息: 但是我找不到有关列创建日期的任何信息。 更新: 这可能会有所帮助。