我正在尝试通过 Knex.js 生成如下查询:
INSERT INTO table ("column1", "column2")
SELECT "someVal", 12345
WHERE NOT EXISTS (
SELECT 1
FROM table
WHERE "column2" = 12345
)
基本上,我只想在特定值尚不存在时插入值。但是 Knex.js 似乎不知道该怎么做;如果我调用 knex.insert()
(没有值),它会生成一个“插入默认值”查询。
我尝试了以下方法:
pg.insert()
.into(tableName)
.select(_.values(data))
.whereNotExists(
pg.select(1)
.from(tableName)
.where(blah)
);
但这仍然只是给我默认值的东西。我尝试添加一个 .columns(Object.keys(data))
,希望 insert()
能够兑现这一点,但没有成功。
是否可以使用 knex 生成我想要的查询,或者我只需要构建一个原始查询,而无需 Knex.js 方法?
最佳答案
我认为选择需要传递到插入中:
pg.insert(knex.select().from("tableNameToSelectDataFrom")).into("tableToInsertInto");
此外,为了选择常量值或表达式,您需要在选择中使用 knex.raw 表达式:
knex.select(knex.raw("'someVal',12345")).from("tableName")
这是我的第一篇文章,我没有测试您的具体示例,但我已经使用上述技术完成了与您要求的类似的事情。
关于javascript - Knex.js 从选择中插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29870713/