У меня есть таблица с именем users_import
, в которую я анализирую и импортирую файл CSV. Используя эту таблицу, я хочу ОБНОВИТЬ свою таблицу users
, если пользователь уже существует, или ВСТАВИТЬ, если она еще не существует. (На самом деле это очень упрощенный пример чего-то гораздо более сложного, что я пытаюсь сделать.)
Я пытаюсь сделать что-то очень похожее на это: https://stackoverflow.com/a/8702291/912717
Вот определения таблицы и запрос:
CREATE TABLE users (
id INTEGER NOT NULL UNIQUE PRIMARY KEY,
name TEXT NOT NULL
);
CREATE TABLE users_import (
id INTEGER NOT NULL UNIQUE PRIMARY KEY,
name TEXT NOT NULL
);
WITH upsert AS (
UPDATE users AS u
SET
name = i.name
FROM users_import AS i
WHERE u.id = i.id
RETURNING *
)
INSERT INTO users (name)
SELECT id, name
FROM users_import
WHERE NOT EXISTS (SELECT 1 FROM upsert WHERE upsert.id = users_import.id);
Этот запрос дает эту ошибку:
psql:test.sql:23: ERROR: column reference "id" is ambiguous
LINE 11: WHERE NOT EXISTS (SELECT 1 FROM upsert WHERE upsert.id = us...
^
Почему id
неоднозначен и что его вызывает?