Spalten Tabellenupdate mit ID

Maris

Aktiver Benutzer
Beiträge
32
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
 
Werbung:
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.
 
Code:
UPDATE tabelleA SET tabelleA.[Meta Description] = f.[Meta Description] FROM tabelleA INNER JOIN csvfile f ON tabelleA.ID = f.ID
in etwa
 
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
 
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];
 
Werbung:
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.
 
Zurück
Oben