列引用 xxx 在 upsert 语句中不明确(候选:excluded.xxx,table.xxx)
column reference xxx is ambiguous (candidates: excluded.xxx,table.xxx) in upsert statement
我想在 cockroach 数据库中执行 upsert sql 语句。
我想在 table 中不存在特定 id 时将行插入 table 并更新 name 列,当具有给定值的 id 存在于 table 中时。
Table定义:
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]);
我收到以下错误:
error: column reference "id" is ambiguous (candidates: excluded.id,
programs_tiers.id).
我该如何解决这个问题?
指定 table 名称以修复歧义:
[...] WHERE program_id = ? AND programs_tiers.id = ?
^^^^^^^^^^^^^^^
我想在 cockroach 数据库中执行 upsert sql 语句。
我想在 table 中不存在特定 id 时将行插入 table 并更新 name 列,当具有给定值的 id 存在于 table 中时。
Table定义:
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]);
我收到以下错误:
error: column reference "id" is ambiguous (candidates: excluded.id, programs_tiers.id).
我该如何解决这个问题?
指定 table 名称以修复歧义:
[...] WHERE program_id = ? AND programs_tiers.id = ?
^^^^^^^^^^^^^^^