【发布时间】:2021-09-03 09:13:17
【问题描述】:
我有两张桌子:table1 和 table2。表 1 包含 event_Id、event_date。表 2 包含 event_Id 作为外键、booked_on、email(主键)。目前,如果没有冲突,我在table2中插入数据,并在同一个查询中从table1中选择数据。
WITH NEW_ROW AS ( INSERT INTO TABLE1(EVENT_ID,BOOKED_ON,EMAIL) VALUES('SOME ID',NOW()) ON CONFLICT DO NOTHING RETURNING EVENT_ID ) SELECT TEMPLATE_ID FROM TABLE2 WHERE EVENT_ID IN (SELECT EVENT_ID FROM NEW_ROW
现在,我只想在同一查询中的 table1 中提到的 event_date 尚未通过时才在 table2 中插入数据。 我想出了代码,但我不知道如何在当前查询中插入它。
TABLE1.EVENT_DATE::DATE - NOW()::DATE)>=1
编辑:Table1 样本插入:
INSERT INTO TABLE1(EVENT_ID,EVENT_DATE)VALUES('EVENT1','2/9/2021'),('EVENT2','4/9/2021');
表2插入:
INSERT INTO TABLE2(EMAIL,EVENT_ID,BOOKED_ON)VALUES('A@GMAIL.COM',EVENT1,NOW());
INSERT INTO TABLE2(EMAIL,EVENT_ID,BOOKED_ON)VALUES('B@GMAIL.COM',EVENT2,NOW());
到这里,Event1 已经过去了。因此,不应在 table2 中插入新行。而 Event2 还没有通过,如果还没有进入,可以进入这个事件。
【问题讨论】:
-
U 可以在创建表时包含默认值。
-
@RahulBiswas Table1 可以有多个不同 event_date 的事件。如果
now()小于相应的事件日期,我不知道如何在table2 中指定此事件而针对此事件的列创建。然后只插入。 -
请提供少量样本数据和预期输出。
-
@RahulBis 我做到了。如果您对数据有任何疑问,请告诉我。
标签: sql postgresql