Ich habe das Problem, mehrere Spalten (2) in mehreren Zeilen (7) von einer Subselect-Abfrage zu aktualisieren. HierSQL Update mehrere Zeilen und Spalten mit Subselect-Abfrage
ist das, was ich bisher:
UPDATE commandtbl2 t1
SET (attr, attr2) = (
SELECT attr, attr2
FROM commandtbl3 t2
WHERE t1.cmd=t2.cmd
);
Allerdings, wenn ich diesen Lauf lasse ich bekommen SQLCODE = -811, SQLSTATE = 21000
(DAS ERGEBNIS EINER EINGEBETTETE SELECT-Anweisung oder einen subselect IN DER SET-KLAUSEL EINER AKTUALISIERUNGSERKLÄRUNG IST EINE TABELLE VON MEHR ALS EINER REIHE, ODER DAS ERGEBNIS EINER UNTERNAHME EINER GRUNDPRÄDIKATION IST MEHR ALS EIN WERT.
Wo ist mein Fehler? Es sollte die 2 Spalten in 3 Zeilen ändern und die anderen Zeilen so belassen wie sie sind. Ich kann nur SQL verwenden, also kein Java, PHP und so weiter.
Da es sich um DB2 Lösungen, die ich gefunden haben online wie:
UPDATE commandtbl2 t1
SET attr = t2.attr, attr2=t2.attr2
FROM commandtbl2 t1
JOIN commandtbl3 t2
ON t1.cmd = t2.cmd ;
Oder
UPDATE
commandtbl2 t1
JOIN
commandtbl3 t2 ON t1.cmd=t2.cmd
SET
t1.attr = t2.attr,
t1.attr2=t2.attr2;
nicht funktionieren aber Ausnahmen werfen.
Danke für Ihre Hilfe.
TheVagabond
Mögliche Duplikat [Update-Abfrage SQL Joins] (http://stackoverflow.com/questions/982919/sql-update-query-using-joins) – HoneyBadger
Die Fehlermeldung ist ziemlich klar - Sie Reihen auf ein Update Zeit, so dass der Subselect unter den von Ihnen angegebenen Bedingungen eine einzelne Zeile zurückgeben muss. Finden Sie einen Weg, Zeilen in 'commandtbl3' eindeutig zu identifizieren – mustaccio
Wie viele Zeilen in commandtb2 und commandtbl3? Es scheint, dass Sie nur wenige haben, also können Sie die Zeilen in Ihre Frage bearbeiten, damit wir ihre Werte sehen können? – user2338816