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

UPDATE und JOIN Statement

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von Maris, 15 Februar 2017.

  1. Maris

    Maris Aktiver Benutzer

    Hallo liebe Formenmitglieder,

    ich bin kein SQL Profi aber ich habe folgendes Problem. Ich habe eine Tabelle erstellt:

    CREATE TABLE dialog_db.test_plz
    (
    rPLZ int(5) NOT NULL,
    PRIMARY KEY (`rPLZ`),
    UNIQUE INDEX `rPLZ` (`rPLZ` ASC)
    );

    Habe diese dann mit Postleitzahlen befüllt:

    LOAD DATA LOCAL
    INFILE '/work/operations/test/PLZ_Top100.txt' INTO TABLE dialog_db.test_plz
    FIELDS TERMINATED BY ';'
    ENCLOSED BY '"'
    LINES TERMINATED BY '\n';

    Im Anschluss habe ich die Tabelle um Spalten erweitert:

    ALTER TABLE dialog_db.test_plz
    ADD COLUMN MdId VARCHAR(255), ADD COLUMN Eingenschaften VARCHAR(255),
    CHARACTER SET 'latin1' NULL DEFAULT NULL;

    Und jetzt möchte ich die zwei zusätzlichen Zellen befüllen mit JOIN und UPDATE :

    Datenbank =dialog_db für beide Tabellen

    Meine Tabelle= test_plz mit rPLZ

    Datentabelle = md_base mit Plz

    Sprich: Schreibe mir in die Tabelle test_plz alle Werte aus den Spalten MdId UND Eingenschaften der Tabelle md_base bei den die PLZ gleich ist.

    Das bekomme ich leider nicht hin. Kann mir bitte jemand helfen?

    Beste Grüße,
    Maris
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Fangen wir mal ganz langsam an.

    Eine PLZ als INT zu speichern ist falsch, meine PLZ hier beginnt mit 0. Gleichzeitig einen PK und einen Unique Index zu vergeben ist auch Murks, weil ein PK per se schon Unique ist.


    Die Syntax für Update ist (in PostgreSQL zumindest):

    Code:
    test=*# \h update
    Anweisung:  UPDATE
    Beschreibung: aktualisiert Zeilen einer Tabelle
    Syntax:
    [ WITH [ RECURSIVE ] With-Anfrage [, ...] ]
    UPDATE [ ONLY ] Tabellenname [ * ] [ [ AS ] Alias ]
      SET { Spaltenname = { Ausdruck | DEFAULT } |
      ( Spaltenname [, ...] ) = ( { Ausdruck | DEFAULT } [, ...] ) |
      ( Spaltenname [, ...] ) = ( Sub-SELECT )
      } [, ...]
      [ FROM From-Liste ]
      [ WHERE Bedingung | WHERE CURRENT OF Cursor-Name ]
      [ RETURNING * | Ausgabeausdruck [ [ AS ] Ausgabename ] [, ...] ]
    
    Also Du suchst sinngemäß...

    UPDATE tabelle SET ... FROM tabelle, tabelle2 WHERE tabelle.spalte=tabelle2.spalte

    Das schaffst Du!
     
  3. ukulele

    ukulele Datenbank-Guru

    Ich glaube MySQL kann weder die Syntax noch die Referenz auf die zu aktualisierende Tabelle im Update. Da muss man vermutlich tricksen.
     
  4. Maris

    Maris Aktiver Benutzer

    Das mit dem SET verstehe ich noch nicht wirklich ganz. Aber so vielleicht?

    UPDATE dialog_db.test_plz
    SET MdId, Eigenschaften
    FROM test_plz, md_base
    WHERE md_base.Plz = test_plz.rPLZ;

    Das andere habe ich korrigiert:

    CREATE TABLE dialog_db.test_plz
    (
    rPLZ varchar(5) NOT NULL,
    PRIMARY KEY (`rPLZ`),
    );
     
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