首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从select插入Knex.js

从select插入Knex.js
EN

Stack Overflow用户
提问于 2015-04-26 05:02:42
回答 2查看 6.9K关注 0票数 5

我正在尝试通过Knex.js生成如下所示的查询:

代码语言:javascript
复制
    INSERT INTO table ("column1", "column2")
    SELECT "someVal", 12345
    WHERE NOT EXISTS (
        SELECT 1
        FROM table
        WHERE "column2" = 12345
    )

基本上,我只想在特定值不存在的情况下插入值。但是Knex.js似乎不知道如何做到这一点;如果我调用knex.insert() (没有值),它会生成一个“插入默认值”查询。

我尝试了以下几种方法:

代码语言:javascript
复制
    pg.insert()
        .into(tableName)
        .select(_.values(data))
        .whereNotExists(
            pg.select(1)
                .from(tableName)
                .where(blah)
        );

但这仍然只给了我默认值的东西。我尝试添加一个.columns(Object.keys(data)),希望insert()能支持它,但没有成功。

有没有可能用knex生成我想要的查询,或者我只需要构建一个原始查询,而不需要Knex.js方法?

EN

回答 2

Stack Overflow用户

发布于 2015-10-03 05:12:00

我认为需要将select传递给insert:

代码语言:javascript
复制
pg.insert(knex.select().from("tableNameToSelectDataFrom")).into("tableToInsertInto");

此外,为了选择常量值或表达式,您需要在select中使用knex.raw表达式:

代码语言:javascript
复制
knex.select(knex.raw("'someVal',12345")).from("tableName")

这是我的第一篇文章,我没有测试你的具体例子,但我已经用上面的技术做过类似的事情,就像你问的那样。

票数 5
EN

Stack Overflow用户

发布于 2022-01-19 14:11:06

我已经设法让它在我的项目中工作,它看起来并没有那么糟糕!

代码语言:javascript
复制
        .knex
            .into(knex.raw('USER_ROLES (ORG_ID, USER_ID, ROLE_ID, ROLE_SOURCE, ROLE_COMPETENCE_ID)'))
            .insert(builder => {
                builder
                    .select([
                        1,
                        'CU.USER_ID',
                        'CR.ROLE_ID',
                        knex.raw(`'${ROLES.SOURCE_COMPETENCE}'`),
                        competenceId,
                    ])
                    .from('COMPETENCE_USERS as CU')
                    .innerJoin('COMPETENCE_ROLES as CR', 'CU.COMPETENCE_ID', 'CR.COMPETENCE_ID')
                    .where('CU.COMPETENCE_ID', competenceId)
                    .where('CR.COMPETENCE_ID', competenceId);

请注意,目前这似乎不适用于MSSQL上的returning子句(它只是被Knex忽略了)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29870713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档