【问题标题】:How to insert in postgres if column_date has not passed?如果 column_date 未通过,如何在 postgres 中插入?
【发布时间】:2021-09-03 09:13:17
【问题描述】:

我有两张桌子:table1table2。表 1 包含 event_Idevent_date。表 2 包含 event_Id 作为外键、booked_onemail(主键)。目前,如果没有冲突,我在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


【解决方案1】:

请检查这个。如果一个事件已经存在于 table2 中并且您不想将它添加到 table2 中,则使用 NOT EXISTS。

-- MySQL
INSERT INTO TABLE2(EMAIL,EVENT_ID,BOOKED_ON)         
SELECT 'A@GMAIL.COM' EMAIL
     , t.EVENT_ID
     , NOW()     
FROM TABLE1 t
WHERE t.EVENT_ID = 'EVENT1'
     AND t.EVENT_DATE > NOW()
     AND NOT EXISTS (SELECT 1
                     FROM TABLE2
                     WHERE EVENT_ID = t.EVENT_ID);

【讨论】:

    猜你喜欢
    • 2021-08-21
    • 2011-08-26
    • 2017-04-23
    • 1970-01-01
    • 2022-12-17
    • 2023-02-06
    • 2011-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多