Вот упрощенная версия запроса, который я пытаюсь написать. Он предназначен для сохранения строки как переменной combine
, затем UPDATE
в таблице media_hashtags, если существует определенная запись, иначе INSERT эту запись.Postgres Вставка/обновление запроса не работает должным образом
WITH
combine AS (
SELECT * FROM hashtags WHERE hashtag_text='HOPPA'
)
UPDATE media_hashtags SET hashtag_id = (SELECT id FROM combine) WHERE user_id = 58 AND media_id=161;
INSERT INTO media_hashtags (media_id, user_id, hashtag_id)
SELECT 161, 58, (SELECT id FROM combine)
WHERE NOT EXISTS (
SELECT * FROM media_hashtags
WHERE (
user_id = 58 AND
media_id = 161
)
)
RETURNING *
Однако, я получаю эту ошибку:
ERROR: relation "combine" does not exist
LINE 8: SELECT 161, 58, (SELECT id FROM combine)
Интересно, что если я сделать запрос с только UPDATE
или только INSERT
команды, то она выполняется, как ожидалось. Ошибка возникает только тогда, когда я делаю это сразу. Любые идеи о том, что проблема, и исправление?
Там, кажется, две отдельных запросы (поиск точки с запятой). Естественно, что второй не видит «комбайн» с первого – leonbloy
. Это имеет смысл. Полагаю, я мог бы переписать комбайн, но это было бы многословием. Есть ли лучший способ решить эту проблему? – dmwong2268