2 Stimmen

SQL-Abfrage - Kann ich dies nicht machen?

UPDATE TABELLE set A = (
SELECT
    CASE
        WHEN B - C >= A  THEN A
        WHEN B - C <  A THEN B - C
    END AS A
from 
TABELLE )

Die Antwort, die ich erhalte ist:

Die Unterabfrage hat mehr als einen Wert zurückgegeben. Dies ist nicht zulässig, wenn die Unterabfrage auf =, !=, <, <=, >, >= folgt oder wenn die Unterabfrage als Ausdruck verwendet wird.

3voto

rsbarro Punkte 26319

Nein, das funktioniert nicht, wenn Ihre Tabelle mehr als 1 Datensatz enthält. In diesem Fall bin ich mir nicht sicher, warum Sie eine Unterabfrage verwenden. Ich denke, Sie suchen nach so etwas:

UPDATE MyTable
SET A = 
    CASE
        WHEN B - C >= A THEN A
        ELSE B - C
    END

Diese Abfrage aktualisiert die Spalte A für jeden Datensatz in der Tabelle. Wenn B - C größer oder gleich A ist, bleibt der Wert von A unverändert. Andernfalls wird A auf B - C gesetzt. Ich würde auch ein ELSE anstelle von zwei WHENs verwenden.

1voto

Michael Moreno Punkte 181

Das Problem, das du hier hast, ist, dass du die Primärschlüssel in der Unterabfrage nicht angegeben hast, um den Primärschlüssel der aktualisierten Zeile abzugleichen. Daher werden alle Zeilen, die der Bedingung entsprechen, zurückgegeben, was die Fehlermeldung betrifft.

Vermutlich sollte dein Code so lauten:

UPDATE TableABC
SET A = CASE
          WHEN B - C >= A THEN A
          WHEN B - C <  A THEN B - C
        END

Aber da dein SQL unvollständig ist, kann ich mir nicht sicher sein.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X