upsert语句中的列引用xxx不明确(候选:exclude.xxx,table.xxx)

时间:2019-06-03 15:10:52

标签: knex.js upsert cockroachdb

我想在蟑螂数据库中执行upsert sql语句。

当表中不存在特定的 id 时,我想在表中插入行,并且当表中存在具有给定值的id时,更新 name 列。

表定义:

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)。

我该如何解决?

1 个答案:

答案 0 :(得分:1)

指定表名以解决歧义:

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