Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Brauche Hilfe bei einem Update Statement

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von Fastman, 5 Februar 2013.

  1. Fastman

    Fastman Neuer Benutzer

    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
     
  2. akretschmer

    akretschmer Datenbank-Guru

    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
     
  3. ukulele

    ukulele Datenbank-Guru

    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.
     
  4. Fastman

    Fastman Neuer Benutzer

    @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
     
  5. akretschmer

    akretschmer Datenbank-Guru

    Der Fehler lautet wie? Da ist sicher nur eine kleine Änderung nötig...

    Andreas
     
  6. Fastman

    Fastman Neuer Benutzer

    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.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden