代码之家  ›  专栏  ›  技术社区  ›  Sam Schick

knex.js中的查询除外

  •  0
  • Sam Schick  · 技术社区  · 7 年前

    EXCEPT 查询然而,我找不到knex对此的支持(除了raw)。有办法吗 除了 我错过的问题?我知道我可以在子查询中加入一个 WHERE NOT IN

    2 回复  |  直到 7 年前
        1
  •  3
  •   coockoo    7 年前

    最快的检查方式 existence 在postgres中是 where exists/not exists

    这很容易做到 knex

    const knex = require('knex')({ client: 'pg' })
    
    const builder = knex('table_name')
        .insert((sub) => {
            sub.select('*').from('another_table').whereNotExists((existsBuilder) => {
                existsBuilder
                    .select('*')
                    .from('table_name')
                    .whereRaw('table_name.id = another_table.id')
            })
        })
    
    console.log(builder.toString())
    // => insert into "table_name" select * from "another_table" where not exists (select * from "table_name" where table_name.id = another_table.id)
    
        2
  •  1
  •   Mikael Lepistö    7 年前

    通常,postgresql会优化您的 not in (subquery) except 陈述

    Knex没有任何特殊支持 EXCEPT 查询,因此如果您喜欢使用它,那么您确实需要执行以下操作:

    knex.raw(`? EXCEPT ?`, [query1, query2])