Я хотел бы выполнить оператор upsert sql в базе данных тараканов.
Я хотел бы вставить строку в таблицу, когда конкретный я бы не существует в таблице, и обновить столбец имя, когда в таблице существует идентификатор с заданным значением.
Определение таблицы:
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)
);
Вот мой оператор 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).
Как я мог решить это?
Укажите имя таблицы, чтобы исправить двусмысленность:
[...] WHERE program_id = ? AND programs_tiers.id = ?
^^^^^^^^^^^^^^^
База данных создает «виртуальную» excluded
таблицу, содержащую вставленные значения. В этой таблице также есть столбец id
.
да, это была проблема. Спасибо! но почему, когда я работаю на одной таблице?