Ich muss eine Aktualisierungsanweisung schreiben, die mehrere Tabellen verwendet, um zu bestimmen, welche Zeilen aktualisiert werden sollen, da in Oracle mehrere Tabellen nicht zulässig sind. Die folgende Abfrage gibt einen "ORA-00971: Fehlendes SET-Schlüsselwort"-Fehler
UPDATE
TABLE1 a,
TABLE2 b
SET
a.COL1 = 'VALUE'
WHERE
a.FK = b.PK
AND b.COL2 IN ('SET OF VALUES')
Beim Nachschlagen der Syntax der UPDATE-Anweisung in Oracle habe ich Folgendes gefunden enlace die zeigt, dass Sie eine Unterabfrage anstelle eines Tabellennamens verwenden können.
Als ich versuchte, die Abfrage so zu schreiben, erhielt ich die Meldung "ORA-01779: Cannot modify a column which maps to a non key-preserved table"
UPDATE
(
SELECT
a.COL1
FROM
TABLE1 a,
TABLE2 b
WHERE
a.FK = b.PK
AND b.COL2 IN ('SET OF VALUES')
) update_tbl
SET
update_tbl.COL1 = 'VALUE'
Ich habe die Abfrage umgeschrieben (siehe unten), indem ich stattdessen eine EXISTS-Anweisung verwendet habe, und es funktioniert gut, aber ich würde trotzdem gerne wissen, wie das gemacht wird.
UPDATE
TABLE1 update_tbl
SET
update_tbl.COL1 = 'VALUE'
WHERE
EXISTS (
SELECT
1
FROM
TABLE1 a
TABLE2 b
WHERE
a.FK = b.PK
AND b.COL2 IN ('SET OF VALUES')
AND update_tbl.PK = a.PK
)
Danke! -Nate