MySQL: 2 CSV Files -> 1 Tabelle
toby
- datenbank
1 Rouven2 Vinzenz Mai
Hi,
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.
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,
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 :(
Wisst Ihr mehr und verratet es auch?
Danke...
Hi,
ich komm jetzt wieder mit der billigen Workaround-Lösung:
Die andere Variante ist die Frage, ob man beim CSV-Import die Spalten festlegen kann. Bei einem SQL-Dump könnte man schlichtweg das INSERT-Statement umschreiben, obs bei CSV geht kann ich nicht sagen.
MfG
Rouven
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