LOGIC: Ich möchte loyalty_customers
erstellen, wenn customers.user_id
null ist und aktualisieren customers.user_id
ist loyalty_customers.id
Update von eingefügt ID
ich eine Abfrage haben und es funktioniert nicht:
UPDATE customers
SET user_id = (
INSERT INTO loyalty_users (name) VALUES ('anonymous')) RETURNING id
)
WHERE user_id IS NULL;
Fehler wie:
LINE 3: INSERT INTO loyalty_users
Sieht aus wie INSERT kann nicht von einer Abfrage umgebrochen werden, habe ich diese Abfrage versucht und es funktioniert immer noch nicht:
SELECT id FROM (
INSERT INTO loyalty_users (name) VALUES ('anonymous')) RETURNING id);
jedoch Stand-alone-INSERT-Abfrage arbeiten wie ein Zauber:
INSERT INTO loyalty_users (name) VALUES ('anonymous')) RETURNING id;
Es ist nicht ganz klar, was Ihre Logik ist, aber Sie könnten einen Trigger in Betracht ziehen, der nach 'UPDATE' ausgelöst wird. –
Es ist ein Migrationsskript, so kann ich Trigger hier nicht verwenden –
Möchten Sie eine einzelne anonyme einfügen (und fügen Sie es jeder Zeile, die 'user_id IS NULL ist), oder Sie möchten eine separate anonyme für jede 'user_id IS NULL 'Reihe? (In beiden Fällen ist die Verwendung von [CTEs] (http://www.postgresql.org/docs/current/static/queries-with.html) hier die einfachste Lösung, kann aber schwierig sein, wenn Sie für jede Zeile ein separates Anomynous wünschen). – pozs