Leere Spalte mit SQL aus anderen DB-Tabellen befüllen



  • Hallo,
    ich versuche seit einiger Zeit vergeblich mittels SQL-Abfrage eine Tabellen-Spalte meiner Datenbank richtig zu befüllen.
    Diverse SQL-Bücher bzw. das Internet haben mich nicht weiter gebracht. Ich denke für Euch dürfte mein Anliegen kein Problem sein.

    In meiner MySQL-Datenbank befinden sich in der Umbauphase vereinfacht 3 Tabellen:
    (1) Kunde
    Kd-Nr (Primary)
    Kd-Name
    Kd-Vorname

    (2) Artikel
    Art-Nr (Primary)
    Art-Bezeichnung

    (3) Auftrag
    Auftrags-Nr (Primary)
    Art-Nr
    Art-Bezeichnung
    Kd-Name
    Kd-Vorname

    Tabelle (3) soll zukünftig ersetzt werden.
    Kd-Nr, Art-Nr sollen nach den Umbauten als Fremdschlüssel mit den Tabellen Kunde bzw. Artikel verbunden werden
    (3) Auftrag_z
    Auftrags-Nr (Primary)
    Art-Nr
    Kd-Nr

    Um das zu erreichen habe ich Tabelle (3) kopiert, die Spalten Art-Bezeichnung, Kd-Name u Kd-Vorname gelöscht.
    sowie die Spalte Kd-Nr neuangelegt.
    Leider gelingt es mir nicht diese neue Spalte mit SQL-Befehl aus den bestehenden Tabellen richtig zu befüllen.

    Meine Versuche mit folgendem bzw. ähnlichen Konstruktionen waren erfolglos

    INSERT INTO Auftrag_z (Kd-Nr) 
    SELECT k.Kd-Nr 
    FROM Kunde k, Auftrag a
    WHERE k.Name = a.Name AND k.Vorname = a.Vorname
    

    Kann mir jemand helfen? Vielen Dank, schon 'mal



  • hm, ich weiss nicht ob der dash (also das -) in Tabellen/Spaltennamen erlaubt ist, üblich ist eher underscore (_).



  • Entweder alles zusammen einfügen

    SET IDENTITY_INSERT ON;
    INSERT [Auftrag_z] ([Auftrags-Nr], [Art-Nr], [Kd-Nr])
        SELECT a.[Auftrags-Nr], a.[Art-Nr], k.[Kd-Nr]
        FROM [Auftrag] a
        LEFT JOIN [Kunde] k ON k.[Kd-Name] = a.[Kd-Name] AND k.[Kd-Vorname] = a.[Kd-Vorname];
    

    oder per UPDATE

    UPDATE [Auftrag_z]
        SET [Kd-Nr] =
        (
            SELECT k.[Kd-Nr]
            FROM [Kunde] k
            WHERE k.[Kd-Name] = [Auftrag_z].[Kd-Name] AND k.[Kd-Vorname] = [Auftrag_z].[Kd-Vorname]
        );
    

    p.S.: die INSERT Variante baut Mist, wenn es mehrere Kunden mit dem gleichen Namen gibt, anstatt einen Fehler zu verursachen. Hab aber grad keinen Geist das nochmal umzuschreiben.



  • @hustbaer,
    vielen Dank, ich habe Deinen Vorschlag mit UPDATE eingesetzt. Das klappt 1AAAA! 👍 :). Den SQL kann ich auch gut nachvollziehen.

    phlox81 schrieb:

    weiss nicht ob der dash (also das -) in Tabellen/Spaltennamen erlaubt ist

    Habe im MySQL-Browser nochmal im Tabellennamen ein "-" eingebaut. Das geht ohne Fehlermeldung. Du hast aber Recht, vielleicht sollte man das wegen Verwechslung mit "Minus" etc. vermeiden.


Anmelden zum Antworten