Brauche Hilfe bei einem Update Statement

Fastman

Neuer Benutzer
Beiträge
3
Hallo zusammen,

ich benötige Hilfe bei einem Update-Statement, mit dem ich mehrere Datensätze auf einmal updaten kann.

Ich habe 2 Tabellen mit jeweils 2 Attributen:

Tabelle1: Att1 | Att2
Tabelle2: Att1 | Att3

In Tabelle1 sind einige Att2 falsch, die ich gerne updaten möchte.
Die richtigen Werte habe ich in Tabelle2 in Att3.
Verknüpft sind die Tabellen mit Att1.

Ich möchte also alle Att2 durch Att3 ersetzen, bei denen Tabelle1.Att1 = Tabelle2.Att1 ist.

Leider bekomme ich das Statement nicht hin.

Ich bin bei:

"update Tabelle1
set Att2 = (select Att3 from Tabelle2 where Tabelle1.Att1=Tabelle2.Att1)
where ???"

Muss ich hier noch mit einer in-Anweisung ergänzen, also...

"where Tabelle1.Att1 in (select Att1 from Tabelle2)" ?

Bin für jeden Tipp dankbar.

Vielen Dank.

Gruß
Fastman
 
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.830
Ich habe 2 Tabellen mit jeweils 2 Attributen:

Tabelle1: Att1 | Att2
Tabelle2: Att1 | Att3

In Tabelle1 sind einige Att2 falsch, die ich gerne updaten möchte.
Die richtigen Werte habe ich in Tabelle2 in Att3.
Verknüpft sind die Tabellen mit Att1.


Gruß
Fastman

Code:
test=# select * from t1;
 c1 | c2
----+----
  1 |  1
  2 |  2
(2 rows)

Time: 0,228 ms
test=*# select * from t2;
 c1 | c3
----+----
  2 | 20
  1 | 10
(2 rows)

Time: 0,173 ms
test=*# update t1 set c2 = t2.c3 from t2 where t1.c1=t2.c1;
UPDATE 2
Time: 0,349 ms
test=*# select * from t1;
 c1 | c2
----+----
  1 | 10
  2 | 20
(2 rows)

Time: 0,144 ms

Sollte vollständig portabel zwischen unterschiedlichen SQL-Dialekten sein.

Andreas
 

ukulele

Datenbank-Guru
Beiträge
4.702
Ich glaube da muss noch ein select rein:
update t1 set c2 = select t2.c3 from t2 where t1.c1=t2.c1

Aber im wesentlichen ist Fastmans Ansatz schon richtig, du musst nur mit Aliasen arbeiten um die Tabellen zu unterscheiden.
 

Fastman

Neuer Benutzer
Beiträge
3
@akretschmer:

Vielen Dank.

Ich hatte vergessen zu erwähnen, dass ich das Update unter Informix SQL durchführen will.

Unter MS SQL funktioniert das wie von Dir beschrieben, unter Informix SQL gibt es leider einen Syntax Error.

Noch irgendeine Idee, wie man das SQL-Dialekt unabhängig durchführen kann?

Vielen Dank.

Gruß
Fastman
 
Werbung:

Fastman

Neuer Benutzer
Beiträge
3
Habe es jetzt hinbekommen.

Das korrekte Update-Statement unter Informix SQL lautet:

"update Tabelle1
set Tabelle1.Att2 = (select Tabelle2.Att3 from Tabelle2 where Tabelle1.Att1=Tabelle2.Att1)
where Tabelle1.Att1 in (select Tabelle2.Att1)"

Vielen Dank für die Tipps.
 
Oben