385 Stimmen

Aktualisierungsanweisung mit innerem Join auf Oracle

Ich habe eine Abfrage, die in MySQL gut funktioniert, aber wenn ich sie in Oracle ausführe, erhalte ich folgenden Fehler:

SQL-Fehler: ORA-00933: SQL-Befehl nicht ordnungsgemäß beendet
00933. 00000 - "SQL-Befehl nicht ordnungsgemäß beendet"

Die Frage lautet:

UPDATE table1
INNER JOIN table2 ON table1.value = table2.DESC
SET table1.value = table2.CODE
WHERE table1.UPDATETYPE='blah';

8voto

Alexis Dufrenoy Punkte 11464

Wie angegeben aquí ist die allgemeine Syntax für die erste von Tony Andrews vorgeschlagene Lösung:

update some_table s
set   (s.col1, s.col2) = (select x.col1, x.col2
                          from   other_table x
                          where  x.key_value = s.key_value
                         )
where exists             (select 1
                          from   other_table x
                          where  x.key_value = s.key_value
                         )

Dies ist vor allem dann interessant, wenn Sie mehr als ein Feld aktualisieren möchten.

6voto

user5299305 Punkte 47

Das Orakel funktioniert einwandfrei

merge into table1 t1
using (select * from table2) t2
on (t1.empid = t2.empid)
when matched then update set t1.salary = t2.salary

4voto

Hemant Punkte 49

Die folgende Syntax funktioniert bei mir.

UPDATE
(SELECT A.utl_id,
    b.utl1_id
    FROM trb_pi_joint A
    JOIN trb_tpr B
    ON A.tp_id=B.tp_id Where A.pij_type=2 and a.utl_id is null
)
SET utl_id=utl1_id;

2voto

Janek Bogucki Punkte 4853

Verwendung von Beschreibung anstelle von desc für Tabelle2,

update
  table1
set
  value = (select code from table2 where description = table1.value)
where
  exists (select 1 from table2 where description = table1.value)
  and
  table1.updatetype = 'blah'
;

1voto

afnhsn Punkte 21
UPDATE table1 t1
SET t1.value = 
    (select t2.CODE from table2 t2 
     where t1.value = t2.DESC) 
WHERE t1.UPDATETYPE='blah';

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