有一组值。我希望将它们中的每一个作为记录插入,如果它还不存在的话。可以在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]}}` ] );
这样做的原因很多,包括限制服务器往返和交易的成本。
答案 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