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

Spalten Tabellenupdate mit ID

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von Maris, 8 Mai 2017.

  1. Maris

    Maris Aktiver Benutzer

    Hallo Leute,

    ich suche verzweifelt nach einer Lösung für mein Problem. Leider finde ich keine Anleitung an der ich mich zu diesem Problem das mir hilft.

    Ich habe eine Tabelle in der stehen mehrere Spalten mit bereits vorhanden Werten.

    Tabelle A

    ID | Hersteller | Meta Description

    Die Spalte Meta Description ist leer. Für diese habe ich eine Excelfile erstellt mit

    CSV File

    ID | Meta Description

    Jetzt möchte ich eigentlich nur das Excel csv in meine Tabelle A importieren. Und zwar zu jeder ID die passende Meta Description in die Datenbank laden.

    Ich habs bislang versucht mit Hilfstabelle und bin gescheitert. Kann mir jemand eine kurze Hilfestellung posten wie ich vorgehen soll?

    Danke und Gruß,
    Maris
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Bei was mit deinen Versuchen mit einer Hilfstabelle bist Du denn gescheitert? Wenn Du nur sagst, daß Du gescheitert bist, nicht aber, was Du getan hast, kann das keiner nachvollziehen.

    Nehmen wir mal an, Du hast bereits eine Hilfstabelle, die deine CSV-Datei enthält. Ich stelle das mal nach, indem ich eine FDW-Tabelle erstelle.

    FDW: Foreign Data Wrapper. PostgreSQL kann auf diesem Wege fremde Datenquellen einbinden. Das ist hier eine CSV-Datei, kann aber auch z.B. eine andere PostgreSQL, MySQL, Oracle oder andere 'normale' DB sein oder aber auch Redis, memcached oder auch, kein Witz, Twitter.

    Meine CSV:

    Code:
    cat /tmp/meine_csv_datei.csv
    1,beschreibung 1
    2,beschreibung 2
    4,beschreibung 4
    
    FDW erstellen:
    Code:
    test=# create extension file_fdw;
    CREATE EXTENSION
    test=*# create server file_server foreign data wrapper file_fdw;
    CREATE SERVER
    test=*# create foreign table description(id int, meta text) server file_server options ( filename '/tmp/meine_csv_datei.csv', format 'csv');
    CREATE FOREIGN TABLE
    test=*# select * from description;
     id |  meta   
    ----+----------------
      1 | beschreibung 1
      2 | beschreibung 2
      4 | beschreibung 4
    (3 Zeilen)
    
    Deine andere Tabelle:
    Code:
    test=*# create table tabelle_a(id int, hersteller text, meta text);
    CREATE TABLE
    test=*# insert into tabelle_a(id, hersteller) values (1, 'hersteller 1');
    INSERT 0 1
    test=*# insert into tabelle_a(id, hersteller) values (3, 'hersteller 3');
    INSERT 0 1
    test=*# insert into tabelle_a(id, hersteller) values (5, 'hersteller 5');
    INSERT 0 1
    test=*# select * from tabelle_a;
     id |  hersteller  | meta
    ----+--------------+------
      1 | hersteller 1 |
      3 | hersteller 3 |
      5 | hersteller 5 |
    (3 Zeilen)
    
    Das Update:
    Code:
    test=*# update tabelle_a set meta=description.meta from description where tabelle_a.id=description.id;
    UPDATE 1
    test=*# select * from tabelle_a;
     id |  hersteller  |  meta   
    ----+--------------+----------------
      3 | hersteller 3 |
      5 | hersteller 5 |
      1 | hersteller 1 | beschreibung 1
    (3 Zeilen)
    
    test=*#
    
    Paßt. Kaffee.
     
  3. ukulele

    ukulele Datenbank-Guru

    Code:
    UPDATE tabelleA SET tabelleA.[Meta Description] = f.[Meta Description] FROM tabelleA INNER JOIN csvfile f ON tabelleA.ID = f.ID
    in etwa
     
  4. Maris

    Maris Aktiver Benutzer

    Hallo Ukulele,

    das bekomme ich mit dem CSV einfach nicht hin. Ich hab das CSV jetzt importiert in eine Tabelle.

    Die Tabelle heißt supplierimport und hat folgende Spalten:

    supplierID | metadesc

    Hier habe ich die Werte befüllt

    Die andere heißt supplier hat die Spalten:

    ID | meta_description

    Die Spalte meta_description ist leer. ID entspricht supplierID

    Dein Statement würde ich wie folgt aufbauen:

    Code:
    UPDATE supplier
    
    SET metadesc = meta_description
    
    FROM supplier AS Ziel
    
    INNER JOIN supplierimport AS Quelle
    
    ON Ziel.ID = Quelle.supplierID
    Ist das so richtig? Würde mich über ein Feeback sehr freuen!

    Gruß,
    Maris
     
  5. akretschmer

    akretschmer Datenbank-Guru

    Warum fragst Du nicht die Datenbank, die gibt Dir sofort Feedback. Und zur Sicherheit gibt es sogar Transaktionen.
     
  6. Maris

    Maris Aktiver Benutzer

    Habs geschafft! Das Statement hätte so aufgebaut sein müssen:

    UPDATE [table1_name] AS t1
    INNER JOIN [table2_name] AS t2
    ON t1.[column1_name] = t2.[column1_name]
    SET t1.[column2_name] = t2.[column2_name];
     
    ukulele gefällt das.
  7. ukulele

    ukulele Datenbank-Guru

    Bei MSSQL arbeite ich mit FROM dazwischen, das geht auch solange ich in FROM die selbe Tabelle (kein Alias) verwende wie in UPDATE. Mag sein das das alle etwas unterschiedlich handhaben.
     
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