Rolf B: csv Datei von Duplikaten befreien / Neue Frage

Beitrag lesen

Hallo Raketenwissenschaftler,

Du kannst in der Tabellendefinition einen Unique-Index über die beiden Spalten setzen.

Das hilft nicht, wenn die Daten Duplicates enthalten. Dann bricht der Import ab. Glaube ich...

TIL[1] : row-value-expressions.

Und damit wäre mein Ansatz dieser: eine Work-Table mit einen NON-UNIQUE Index, so dass Duplicates erstmal kein Problem sind, aber ein GROUP BY effizient via Index möglich ist. Und dann die Duplikate ausblenden. Das geht mit row-value-expressions und NOT IN.

Angenommen, die Tabelle, in die der wirkliche Import stattfinden soll, hieße real_table. Dann gelingt es mit folgender Magie:

INSERT INTO real_table (feld1, feld2, feld3, feld4, feld5, feld6)
SELECT feld1, feld2, feld3, feld4, feld5, feld6
FROM temp_table
WHERE (feld2, feld3) NOT IN (SELECT feld2, feld3
                             FROM temp_table
                             GROUP BY feld2, feld3
                             HAVING COUNT(*) > 1)

(feld2, feld3) ist eine row-value-expression. Sowas kannte ich bisher nur vom DB2 unseres Großrechners, und hielt es für eine nützliche, aber ansonsten unbekannte IBM Erweiterung. Weit gefehlt, das ist SQL-92 und es funktioniert z.B. auch in MYSQL 5.6.

Soviel zu meiner Hypothese, dass man den IN Operator nur für Skalare einsetzen könnte.

Ich dachte kurz, man könnte das auch mit einem JOIN nachbilden, aber das führt (logischerweise) bei N Duplicates zu einer Ver-N-fachung der eindeutigen Sätze. Man müsste also noch einen DISTINCT nachschalten. Ich glaube nicht, dass das effizient ist.

Was übrigens nicht geht, ist ein Vorfiltern der Duplikate auf diese Weise:

DELETE FROM temp_table
WHERE (feld2, feld3) IN (SELECT feld2, feld3
                         FROM temp_table
                         GROUP BY feld2, feld3
                         HAVING COUNT(*) > 1)

Grund: Ich darf in der WHERE Klausel eines DELETE nicht die Tabelle verwenden, aus der gelöscht wird. Wenn man die Duplikatsätze löschen will, müsste man eine Zwischentabelle haben, in der man die (feld2, feld3) Paare speichert, die zu löschen sind.

Rolf

--
sumpsi - posui - clusi

  1. Today I Learned ↩︎

0 100

csv Datei von Duplikaten befreien

Pit
  • php
  1. 0
    Auge
    1. 0
      Pit
      1. 0
        Der Martin
  2. 0
    MudGuard
    1. 0
      Pit
  3. 0

    Kommt drauf an...

    Raktenwissenschaftler
    1. 0
      Raketenwissenschaftler
  4. 0

    csv Datei von Duplikaten befreien / Neue Frage

    Pit
    1. 0
      Pit
      1. 0
        Raketenwissenschaftler
        1. 0
          Raketenwissenschaftler
          • sql
        2. 0
          Tabellenkalk
        3. 0
          Rolf B
          1. 0
            Raketenwissenschaftler
          2. 0
            Pit
            • danke
            • php
            1. 0
              Rolf B
              1. 0
                Pit
                1. 0
                  Rolf B
                  1. 0
                    Pit
                    1. 0
                      Rolf B
                      1. 0
                        Pit
                        1. 0
                          Rolf B
                          1. 0
                            Pit
                            1. 0

                              csv Datei von Duplikaten befreien / Neue Frage und Antwort

                              Pit
                              1. 0
                                Rolf B
                                1. 0
                                  Pit
                                  1. 0
                                    Pit
                                    1. 1
                                      Rolf B
                                      1. 0
                                        Pit
                                        1. 0
                                          Rolf B
                                          1. 0
                                            Pit
                                            1. 0
                                              Rolf B
                                              1. 0
                                                Pit
                                            2. 0
                                              Rolf B
                                              1. 0
                                                Pit
                                                1. 0
                                                  Rolf B
                                                  1. 0
                                                    Pit
                                                    1. 0
                                                      Pit
                                                      1. 0
                                                        Raketenwissenschaftler
                                                        1. 0
                                                          Pit
                                                          1. 0
                                                            Raketenwissenschaftler
                                                            1. 0
                                                              Pit
                                                            2. 0
                                                              Rolf B
                                                              1. 0
                                                                Pit
                                                                1. 0
                                                                  Rolf B
                                                                  1. 0
                                                                    Matthias Apsel
                                                                    1. 0
                                                                      Tabellenkalk
                                                                      1. 0
                                                                        MudGuard
                                                                    2. 0
                                                                      Rolf B
                                                                  2. 0
                                                                    Pit
                                                          2. 1
                                                            Felix Riesterer
                                                            • php
                                                            1. 0
                                                              Pit
                                                              1. 0
                                                                Felix Riesterer
                                                                1. 0
                                                                  Pit
                                                                  1. 1

                                                                    NoSQL?

                                                                    Raketenwissenschaftler
                                                                    1. 0

                                                                      NoSQL? (Korrektur)

                                                                      Raketenwissenschaftler
    2. 0
      Raketenwissenschaftler
      1. 0
        Pit
        1. 0
          Raketenwissenschaftler
      2. 0
        Raketenwissenschaftler
    3. 0
      Felix Riesterer
      1. 0
        Pit
        1. 0
          Tabellenkalk
          1. 3
            Raketenwissenschaftler
            1. 2
              Tabellenkalk
        2. 0
          Felix Riesterer
          1. 0
            Pit
    4. 0
      pl
  5. 1

    Kritik an Deinem Umgang mit Hilfe

    Felix Riesterer
    1. 3
      Pit
      1. 1
        Der Martin
        1. 0
          pl
          1. 0
            Tabellenkalk
            1. 0
              Der Martin
            2. 0
              pl
        2. 0

          Zeilenumbruch in einem CSV-Feld

          Linuchs
          • programmiertechnik
          1. 0
            MudGuard
          2. 0
            Der Martin
            1. 0
              Rolf B
              1. 0
                Der Martin
          3. 0
            pl
            1. 0
              Felix Riesterer
              1. 0
                pl
              2. 0
                pl
              3. 1
                Christian Kruse
                1. 0
                  Rolf B
                  1. 0
                    Christian Kruse
                    1. 0
                      Der Martin
                      1. 0
                        Christian Kruse
                        1. 0
                          Der Martin
                    2. 0
                      Rolf B
                      1. 0
                        Christian Kruse
            2. 0
              Rolf B
              1. 0

                Zeilenumbruch in einer textarea

                pl
      2. 0
        Felix Riesterer
      3. 0
        Rolf B
      4. 0
        pl
        1. 0
          pl
      5. 0
        Raketenwissenschaftler