有一组值。如果它们尚不存在,我希望将它们中的每一个插入为记录。这可以在 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]}}` ] );
这有很多原因,包括限制服务器往返和交易的成本。
最佳答案
您可以使用相关子查询来查找不存在的符合条件的值:
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 fiddle :http://sqlfiddle.com/#!15/e0334/29/0
上面编辑为使用 unnest
关于sql - 在 Postgres 中,对 INSERT 使用值数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31622293/