Ich kann verwenden, CASE
um auszuwählen, welche Spalten in einer SELECT
Abfrage angezeigt werden sollen (Postgres), wie folgt:
SELECT CASE WHEN val = 0 THEN column_x
WHEN val = 1 THEN column_y
ELSE 0
END AS update, ...
Ist etwas Ähnliches überhaupt möglich, wenn eine UPDATE
Abfrage in Postgres ausgeführt wird (dh wählen Sie aus, welche Spalten aktualisiert werden sollen)? Ich nehme nicht an, da ich nichts darüber finden konnte, aber vielleicht hat jemand eine clevere Alternative (außer eine Prozedur zu verwenden oder jede Spalte mit a CASE
zu aktualisieren, um zu bestimmen, ob dem Wert der Spalte ein neuer Wert zugewiesen oder einfach der vorhandene neu zugewiesen werden soll Wert). Wenn es keine einfache Alternative gibt, akzeptiere ich das natürlich auch als Antwort.
Zusätzliche Informationen : In meinem Fall habe ich 14 potenzielle Spalten, die aktualisiert werden können, wobei nur eine pro übereinstimmender Zeile aktualisiert wird (die zu aktualisierende Tabelle wird mit einer anderen in der Abfrage verknüpft). Die Anzahl der zu aktualisierenden Zeilen wird höchstwahrscheinlich variieren und Dutzende oder Hunderte betragen. Ich glaube, dass Indizes für die Beitrittsbedingungen vorhanden sind.
quelle
Wie viele verschiedene Kombinationen von Spalten müssen aktualisiert werden? Wie viele Zeilen der gesamten Tabelle werden aktualisiert? Sind Indizes für den schnellen Zugriff auf zu aktualisierende Zeilen vorhanden?
Abhängig von den Antworten auf diese Fragen können Sie möglicherweise mehrere Aktualisierungsanweisungen ausführen, eine für jede Spalte, die Sie aktualisieren möchten, und die Bedingung für den Wert dieser Spalte in der where-Klausel der Aktualisierung platzieren, sodass in dieser Spalte keine Zeilen aktualisiert werden hat den falschen Wert.
Versuchen Sie, satzbasiert zu denken. Gehen Sie nicht davon aus, dass für die Aktualisierung eine einzelne Zeile aktualisiert werden muss, die vom Primärschlüssel gefunden wurde.
quelle
quelle