Hier ist eine vereinfachte Version einer Abfrage, die ich versuche zu schreiben. Es ist beabsichtigt, eine Zeile als eine Variable combine
, dann UPDATE
die Media_hashtags-Tabelle zu speichern, wenn ein bestimmter Eintrag vorhanden ist, andernfalls diesen Eintrag INSERT.Postgres Insert/Update-Abfrage funktioniert nicht wie erwartet
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 *
Allerdings bekomme ich diesen Fehler:
ERROR: relation "combine" does not exist
LINE 8: SELECT 161, 58, (SELECT id FROM combine)
Interessanterweise Wenn ich eine Abfrage nur mit den UPDATE
oder nur die INSERT
Befehle zu tun, dann ist es wie erwartet ausgeführt wird. Der Fehler tritt nur auf, wenn ich beides gleichzeitig mache. Irgendwelche Ideen, was das Problem ist, und eine Lösung?
scheint Es getrennt zu sein zwei Abfragen hier (nach dem Semikolon suchen). Es ist natürlich, dass der zweite den "Mähdrescher" von der ersten – leonbloy
nicht sieht. Das macht Sinn. Ich nehme an, ich könnte den Mähdrescher neu schreiben, aber das wäre ausführlich. Gibt es einen besseren Weg, um dieses Problem zu lösen? – dmwong2268