Muszę aktualizować wiele kolumn w wielu wierszach w PostgreSQL 9.1. Jestem obecnie robi to z wielu różnych UPDATE
zapytań, każdy, który działa na innym wierszu (w oparciu o klucz podstawowy):Aktualizowanie wielu wierszy z innym kluczem podstawowym w jednym zapytaniu w PostgreSQL?
UPDATE mytable SET column_a = 12, column_b = 6 WHERE id = 1;
UPDATE mytable SET column_a = 1, column_b = 45 WHERE id = 2;
UPDATE mytable SET column_a = 56, column_b = 3 WHERE id = 3;
muszę zrobić kilka tysięcy tych zapytań.
Czy mimo to mogę "zbiorczo aktualizować" wiele wierszy w jednym zapytaniu w PostgreSQL? Jeśli używasz INSERT
, możesz wstawić wiele wierszy naraz: (INSERT INTO mytable (column_a, column_b) VALUES ((12, 6), (1, 45));
), Czy jest coś takiego dla UPDATE
?
Coś jak:
UPDATE mytable SET (id, column_a, column_b) FROM VALUES ((1, 12, 6), (2, 1, 45), (3, 56, 3), …)
??
Ważne jest to, że każda "WARTOŚĆ" aktualizuje tylko jeden wiersz (na podstawie WHERE id =
). Każdy wiersz będzie miał taką samą, stałą liczbę kolumn, które wymagają aktualizacji, ale każdy wiersz będzie miał różne wartości dla każdej kolumny, więc UPDATE mytable SET column_a = 12, column_b = 6 WHERE id IN (1, 2, 3);
nie będzie działać.
To podejście sprawdziło się doskonale! Dzięki!! Działa również z łączeniem na wielu kluczach/kolumnach. To znaczy "gdzie c.id = m.id AND c.column_a = m.column_a"; –