在Postgres中,使用INSERT的值数组

时间:2015-07-25 02:34:08

标签: sql postgresql

有一组值。我希望将它们中的每一个作为记录插入,如果它还不存在的话。可以在SQL中的一个语句完成吗?

传统的javascript方法:

[4,5,8]forEach( x => queryParams(
   insert into t1( c1 ) values( $1 )
   where not exists( select 1 from t1 where c1 = $1`,
   [x]
);

什么是理想的是像

queryParams(
 `some fancy SQL here`,
 [ `{${join[4,5,8]}}` ]
);

这样做的原因很多,包括限制服务器往返和交易的成本。

1 个答案:

答案 0 :(得分:1)

您可以使用相关的子查询来查找与条件匹配的不存在的值:

INSERT INTO Records (X)
    SELECT X
    FROM unnest(ARRAY[4,5,8]) T (X)
    WHERE NOT EXISTS (SELECT * FROM Records WHERE X = T.X);

SQL小提琴:http://sqlfiddle.com/#!15/e0334/29/0

以上编辑使用unnest