toby: MySQL: 2 CSV Files -> 1 Tabelle

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...

  1. Hi,

    ich komm jetzt wieder mit der billigen Workaround-Lösung:

    1. Importiere CSV 1 wie gewohnt in Tabelle A
    2. Importiere CSV 2 wie gewohnt in Tabelle B
    3. Erstelle die neue Tabelle
    4. Füge die ersten Sätze mit
      INSERT INTO neue_tabelle (id, feld1, feld2)
      SELECT id, feld1, feld2 FROM tabelle_a
      und die zweiten mit
      INSERT INTO neue_tabelle (id, feld3, feld4)
      SELECT id, feld3, feld4 FROM tabelle_b

    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

    --
    -------------------
    "I wish it need not have happened in my time" - "So do I, and so do all who live to see such times. But that is not for them to decide. All we have to decide is what to do with the time that is given us."  --  J.R.R. Tolkien: "The Lord Of The Rings: The Fellowship Of The Ring"
  2. 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