knex.js - upsert 语句中的列引用 xxx 不明确(候选人:excluded.xxx,table.xxx)
问题描述
我想在 cockroach DB 中执行 upsert sql 语句。
我想在表中不存在特定ID时将行插入表中,并在表中存在具有给定值的 ID 时更新名称列。
表定义:
CREATE TABLE IF NOT EXISTS programs_tiers (
id STRING PRIMARY KEY,
program_id STRING NOT NULL REFERENCES programs (id),
name STRING,
created TIMESTAMPTZ DEFAULT current_timestamp(),
UNIQUE(program_id, name)
);
这是我使用knex的 sql 语句。
const response = await this.knex.raw('INSERT INTO programs_tiers (id,name) values(?,?) ON CONFLICT(id) DO UPDATE SET name = excluded.name WHERE program_id = ? AND id = ?',[tierId, tierName, programId, tierId]);
我收到以下错误:
错误:列引用“id”不明确(候选人:excluded.id、programs_tiers.id)。
我怎么能解决这个问题?
解决方案
指定表名来修正歧义:
[...] WHERE program_id = ? AND programs_tiers.id = ?
^^^^^^^^^^^^^^^
推荐阅读
- python-3.x - NameError on a function while calling for it in another function of a class
- java - “java.lang.IllegalStateException:测试上下文的 WebApplicationContext [...] 必须使用 MockServletContext 进行配置。”
- azure - 将 Python API 部署到 Azure 应用服务
- c# - 我有一个将字符分配给 char 数组的 for 循环,错误:System.IndexOutOfRangeException
- aurelia - 通过 HTML 循环在 Aurelia 中每行有一个项目的表格和一些属性
- python - boto3:generate_presigned_url 在上传期间被拒绝访问
- javascript - 如何获取不同 ElementId 的动态 Javascript 代码以使用 range-slider.value 更改 element.value
- javascript - 仅当属性禁用时才选择 dom 中的元素
- c# - 使用wpf删除数据库中的数据
- keras - 在自动编码器中使用 LSTM 状态的预测函数出现问题