Daten aus einer Textdatei in eine vorhandene SQL-Tabelle importieren

Schnipp

Neuer Benutzer
Beiträge
1
Hallo zusammen,

ich habe hier eine Tabelle, die mit Daten gefüllt ist (Kundendaten). Eine Spalte ist für einen Aktionscode vorgesehen, der ab und zu zum Einsatz kommen soll. Jeder Kunde bekommt also einen individuellen Aktionscode.

Die Codes werden als TXT-Datei geliefert, in der zweilenweise die Codes enthalten sind.

Ich möchte nun einfach diese Codes aus einer Datei in die vorhandene Tabelle einfügen, also quasi nur ein SQL UPDATE. Allerdings weiß ich gerade nicht, wie ich ansetzen soll.

Vielleicht hat jemand einen Tipp, wie ich richtig anfange?

Gruß Schnipp
 
Werbung:
Gibt es denn eine Regel, welcher Code zu welchem Kunden soll? Gibt es da gleich viele Datensätze? In machen 'richtigen' Datenbanken kannst Du externe Textdateien und andere Datenquellen direkt im SQL mit einbauen, MySQL ist von solchen Features vermutlich noch mehr als 100 Jahre entfernt. Bis dahin: Daten via LOAD DATA (LOCAL) in eine Tabelle einlesen und dann mit SQL weiter.
 
Werbung:
um mal a bissl was zu zeigen...

Teil A, lesen aus der Textdatei. Diese liegt unter /tmp/codes.txt und ich kann so darauf zugreifen:

Code:
test=# create extension file_fdw;
CREATE EXTENSION
test=*# create server my_codes foreign data wrapper file_fdw;
CREATE SERVER
test=*# create foreign table codes (code text) server my_codes options (filename '/tmp/codes.txt', format 'csv');
CREATE FOREIGN TABLE
test=*# select * from codes;
 code  
-------
 code1
 code2
 code3
 code4
(4 Zeilen)

Teil B. Ich gehe mal davon aus, Du hast mehr Leute als Codes, sagen wir mal 10. Und Du willst die 4 Codes zufällig da verteilen.

Code:
test=*# select * from (select *, row_number() over (order by random()) r from leute) l left join (select *, row_number() over (order by random())r from codes ) x using (r);
 r  | id |  name  | code  
----+----+--------+-------
  1 |  7 | name7  | code4
  2 |  2 | name2  | code1
  3 |  4 | name4  | code2
  4 |  9 | name9  | code3
  5 | 10 | name10 |
  6 |  6 | name6  |
  7 |  8 | name8  |
  8 |  1 | name1  |
  9 |  3 | name3  |
 10 |  5 | name5  |
(10 Zeilen)

test=*# select * from (select *, row_number() over (order by random()) r from leute) l left join (select *, row_number() over (order by random())r from codes ) x using (r);
 r  | id |  name  | code  
----+----+--------+-------
  1 |  7 | name7  | code1
  2 |  2 | name2  | code4
  3 |  8 | name8  | code3
  4 |  4 | name4  | code2
  5 |  9 | name9  |
  6 |  5 | name5  |
  7 | 10 | name10 |
  8 |  1 | name1  |
  9 |  3 | name3  |
 10 |  6 | name6  |
(10 Zeilen)

test=*# select * from (select *, row_number() over (order by random()) r from leute) l left join (select *, row_number() over (order by random())r from codes ) x using (r);
 r  | id |  name  | code  
----+----+--------+-------
  1 |  2 | name2  | code4
  2 |  8 | name8  | code1
  3 |  3 | name3  | code2
  4 |  5 | name5  | code3
  5 |  4 | name4  |
  6 |  9 | name9  |
  7 |  1 | name1  |
  8 |  7 | name7  |
  9 | 10 | name10 |
 10 |  6 | name6  |
(10 Zeilen)

Hilft das?
 
Zurück
Oben