postgresql 条件插入值

postgresql conditionnal insert values

我需要一个 SQL 来完成以下工作。

  1. 插入 table_1 (column1, column2, column3) VALUES (:1,:2, :3)
  2. 只有当另一个条件为真时才会发生此插入,
    条件是:
    SELECT 1 来自 table_2 其中 column_time = 'time_stamp'

Table_1 和 table_2 没有任何关系。只有在 Table_2 return TRUE(1)

上的查询才应该发生 table_1 的 INSERT 值

所以我尝试将我的SQL写成如下

 INSERT INTO table_1 (column1, column2, column3) VALUES (:1,:2, :3) 
  WHERE EXISTS (SELECT 1 FROM table_2 WHERE column_time = 'time_stamp') 
  ON CONFLICT DO NOTHING

但是,这 SQL 不起作用,因为 Postgresql 看起来不像 INSERT 与 WHERE 条件相结合。

顺便说一句:值 (:1, :2:, :3) 是绑定数组值。最终的 SQL 看起来像这样:

INSERT INTO table_1 (column1, column2, column3) VALUES ('ca_1','cb_1', 'cc_1') ('ca_2','cb_2', 'cc_2') ... ('ca_n','cb_n', 'cc_n') WHERE EXISTS (SELECT 1 FROM table_2 WHERE column_time = 'my_time_stamp') ON CONFLICT DO NOTHING 

真的需要帮助谢谢。

您需要 select 这些值。

这适用于 Postgres:

INSERT INTO table_1 (column1, column2, column3) 
SELECT :1, :2, :3
WHERE EXISTS (SELECT 1 FROM table_2 WHERE column_time = 'time_stamp') 
ON CONFLICT DO NOTHING

或者:

INSERT INTO table_1 (column1, column2, column3) 
SELECT x.*
FROM (VALUES (:1, :2, :3)) AS x(column1, column2, column3)
WHERE EXISTS (SELECT 1 FROM table_2 WHERE column_time = 'time_stamp') 
ON CONFLICT DO NOTHING