Vinzenz Mai: MySQL: 2 CSV Files -> 1 Tabelle

Beitrag lesen

Hallo Toby,

leider sind Deine Informationen zu spärlich, so dass man Dir nicht so gezielt helfen kann, wie man sich das wünschen würde. Als erstes ist es bei MySQL immer eine gute Idee, die verwendete Version anzugeben, da sich die Leistungsfähigkeit von MySQL von Version zu Version enorm unterscheidet.

hab 2 csv Dateien, die ungefähr so aufgebaut sind:
datei1:
feld1,feld2,ID
datei2:
feld3,feld4,ID
ID ist das gemeinsame Element, was bei 2 zusammengehörigen Einträgen gleich ist.

Folgende Fragen müsstest Du beantworten:

[ ] a) ID ist in datei1 eindeutig
[ ] b) ID ist in datei2 eindeutig
[ ] c) In datei1 gibt es ID-Werte, die in datei2 nicht vorkommen
[ ] d) In datei2 gibt es ID-Werte, die in datei1 nicht vorkommen

Würde mir nun gerne anhand eines geschickten MySQL Querys die Felder der beiden Dateien so importieren, dass sie in einer einzigen Tabelle kombiniert sind,

Wenn Du a) und b) nicht mit "Ja" beantworten kannst, dann ist es nicht sinnvoll, die beiden CSV-Dateien in einer einzigen _Tabelle_ zu kombinieren. Ach, mit einer einzigen Query geht es sowieso nicht.

also Ziel-Tabelle:
ID,feld1,feld2,feld3,feld4
Hab nun lange in der Doku gelesen, aber zur Zusammenführung der Daten aus 2 zu importierenden Dateien konnte ich keine Informationen finden :(

Verbinden, zusammenfügen kannst Du unter anderem mit "to join" übersetzen, d.h. JOIN ist die Operation, die Du suchen solltest. Ich empfehle Dir Rouvens Einführung Joins.

Wenn ich nun annehme, dass Du a) und b) mit Ja beantwortet hast, dann kannst Du wie folgt vorgehen:

- Importiere datei1 in eine temporäre Tabelle t1
 - Importiere datei2 in eine temporäre Tabelle t2
 - Verwende die INSERT ... SELECT-Syntax, um die Daten in Deine Zieltabelle
   zu importieren. Nutze dazu den geeigneten[1] JOIN für Deinen Bedarf.
 - Lösche die temporären Tabellen t1 und t2

[1] Welcher das ist das hängt von der Beantwortung der Fragen c) und d) ab.
    Hast Du beide mit Nein beantwortet, so kannst Du einen INNER JOIN verwenden,
    hast Du genau eine der beiden Fragen mit Ja beantwortet, so reicht Dir ein
    LEFT JOIN, hast Du beide mit Ja beantwortet, so wäre ein FULL OUTER JOIN
    notwendig, den MySQL nicht direkt unterstützt. Mit UNION (MySQL 4.0 oder
    neuer) könntest Du dieses Problemchen jedoch elegant umgehen.

Die Verwendung temporärer Tabellen hat übrigens den Vorteil, dass Du Dir keine Gedanken darüber machen musst, ob jemand anderes zur gleichen Zeit auf die gleichen Tabellen zugreifen könnte. Temporäre Tabellen sind nur für die gleiche Verbindung sichtbar.

Freundliche Grüße

Vinzenz