如何使用 knex 和 postgres 避免错误 42702 (AMBIGUOUS COLUMN)

Posted

技术标签:

【中文标题】如何使用 knex 和 postgres 避免错误 42702 (AMBIGUOUS COLUMN)【英文标题】:how to avoid the error 42702 (AMBIGUOUS COLUMN ) with knex and postgres 【发布时间】:2020-10-26 16:02:12 【问题描述】:

我有两个表,类别和子类别

都有描述字段

我配置了以下查询

 const get = (req, res) => 
    app.db( s: 'subCategory', c: 'category' )
        .select('s.id', 's.description',  category: 'c.description' )
        .whereRaw('?? = ??', ['c.id', 's.categoryId'])
        .where( deletedAt: null )
        .then(subCategorys => res.json(subCategorys))
        .catch(err => res.status(500).send(err))

我重命名了类别列描述字段, 但它显示了重复列的错误,我有另一种方法,我以这种方式重命名并且它适用于那些具有相同名称的列,它显示错误 42702(这是列的模棱两可的错误)

我正在使用 postgresql 并将 knex 重命名为 db

这个方法有什么需要改变的,否则我真的需要用 knex.raw 创建整个查询?

错误: "length": 111, "name": "error", "severity": "ERROR", "code": "42702", "position": "152", "file": "parse_relation.c", "line": "791", "routine": "colNameToVar"

【问题讨论】:

用表别名限定所有列名(如deletedat)。 你是对的,我添加了.whereNull('s.deletedAt'),它成功了非常感谢你 【参考方案1】:

您需要用别名定义不明确的列。 如果deletedAt在表中不明确,则需要在查询中设置s.deletedAt

【讨论】:

以上是关于如何使用 knex 和 postgres 避免错误 42702 (AMBIGUOUS COLUMN)的主要内容,如果未能解决你的问题,请参考以下文章

使用 Postgres/Knex 在 JSONB 列中存储对象

将 Postgres Heroku 与 Knex 连接不起作用

使用 objection.js 或 knex.js 在 postgres 中的字符串列的 json 数组中查询

Node-Postgres/Knex 在 JS 中返回 CITEXT[] 作为字符串,而不是字符串数组

如何使用 Knex.js 查询多对多关系?

如何在 Postgre 中返回主列名?