【问题标题】:Node-postgres prepared statements with conditional arguments带有条件参数的 Node-postgres 准备好的语句
【发布时间】:2020-07-16 20:57:28
【问题描述】:

有没有办法查询您有许多可能未定义的条件(不是必需的)

const c = {
  id?: number
  type?: string
}

const sql = `SELECT * FROM smth WHERE id=$1 AND type=$2`

query(sql , [c.id, c.type])

【问题讨论】:

    标签: postgresql node-postgres


    【解决方案1】:

    你可以使用

    const sql = `SELECT * FROM smth WHERE ($1::int IS NULL OR id=$1) AND ($2::text IS NULL OR type=$2)`;
    

    但总的来说,这是查询构建器库是合适解决方案的地方。

    【讨论】:

    • 嗯,我得到错误:'无法确定参数 $1 的数据类型'
    • @RTW 在这种情况下,请尝试使用显式类型注释
    • 这是正确的,但请注意,使这样的语句有效地与索引一起使用可能会更难。有时最好有几个准备好的语句,每种情况一个。
    • @LaurenzAlbe 谢谢,我想我会手动映射参数然后
    • @LaurenzAlbe 您的意思是,当查询计划在具有不同参数的执行之间缓存时,如果知道参数的null 值,会发现不同且更有效的计划?
    猜你喜欢
    • 2014-10-14
    • 2012-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-20
    相关资源
    最近更新 更多