首页 > 解决方案 > 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)。

我怎么能解决这个问题?

标签: knex.jsupsertcockroachdb

解决方案


指定表名来修正歧义:

[...] WHERE program_id = ? AND programs_tiers.id = ?
                               ^^^^^^^^^^^^^^^

推荐阅读