首页 > 解决方案 > postgresql 条件插入值

问题描述

我需要一个执行以下工作的 SQL。

  1. INSERT INTO table_1 (column1, column2, column3) 值 (:1,:2, :3)
  2. 此插入仅在另一个条件为 TRUE 时发生,
    条件为:
    SELECT 1 FROM table_2 WHERE column_time = 'time_stamp'

Table_1 和 table_2 没有任何关系。只有在 Table_2 上的查询返回 TRUE(1) 时,才会向 table_1 插入值

所以我尝试编写我的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 

真的需要帮助谢谢。

标签: sqlpostgresqlsubquerysql-insertwhere-clause

解决方案


你需要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

推荐阅读