javascript - Knex.js 从选择中插入

标签 javascript node.js knex.js

我正在尝试通过 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/

相关文章:

javascript - Angular JS : Unable to set value to ng-model variable inside ng-repeat

php - 如何将两个域名绑定(bind)到在同一 Azure Ubuntu VM 中运行的两个不同网站(php 和 nodejs)?

javascript - 在 for 循环中重用函数而不重置 JavaScript 中的变量的正确方法是什么?

node.js - 如何让 Babel 处理 LESS 文件?

javascript - 在 React 15.1.0 上重写一个 React-Addons 功能

javascript - Backbone jsffidle加载外部资源失败

Javascript:带有 onkeydown 的 addEventListener 似乎不起作用

sql-server - 连接错误: Failed to connect to localhost:undefined in 15000ms

mysql - 如何使用 Bookshelf.js 编写条件更新查询?

javascript - 如何使用 Knex.js 和 Bookshelf.js (Express JS/Postgres) 插入一对多