Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Datensätze absichtlich doppelt darstellen

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von MoneySoft, 2 Juni 2020.

  1. MoneySoft

    MoneySoft Benutzer

    Ich brauche für eine Auswertung alle Datensätze einer Tabelle doppelt. Das heißt, es sollen alle Datensätze 2-fach in der Abfrage vorhanden sein.
    Das hört sich einfach an aber ich habe keine Idee dazu.
     
  2. Walter

    Walter Administrator Mitarbeiter

    Warum für so etwas die Datenbank quälen statt die Datensätze einfach im Auswertungstool zweimal anzeigen?
     
  3. MoneySoft

    MoneySoft Benutzer

    Vielen Dank für die Antwort.
    Weil ich die Datensätze vor der Auswertung gruppieren muss.
     
  4. akretschmer

    akretschmer Datenbank-Guru

    Code:
    test=*# select * from demo;
     val
    -----
     a
     b
     c
     d
     e
    (5 rows)
    
    test=*# select demo.* from demo left join (select * from generate_series(1,2)) s on true;
     val
    -----
     a
     a
     b
     b
     c
     c
     d
     d
     e
     e
    (10 rows)
    
    test=*# select demo.* from demo left join (select * from generate_series(1,3)) s on true;
     val
    -----
     a
     a
     a
     b
     b
     b
     c
     c
     c
     d
     d
     d
     e
     e
     e
    (15 rows)
    
    test=*#
    
    Mit dem zweiten Parameter von generate_series (was MySQL aber nicht kennt) kannst Du steuern, wie oft es wiederholt werden soll.
     
  5. MoneySoft

    MoneySoft Benutzer

    generate_series geht leider nur im PostGreSQL.
    In meiner Not habe ich mir damit geholfen dass ich eine 2. Tabelle mit zwei gleichen Einträgen angelegt habe und auf diese Tabelle verknüpfe.
    Das passiert normalerweise eher unabsichtlich. Ich kann nur nicht abschätzen was passiert, wenn die Tabelle viele Datensätze (> 5 Mio) beinhaltet.
     
  6. Kampfgummibaerlie

    Kampfgummibaerlie Datenbank-Guru

    Es ist nie zu spät, den Datenbank-Server zu wechseln ;)
     
    akretschmer und castorp gefällt das.
  7. MoneySoft

    MoneySoft Benutzer

    ja, wir haben darüber schon nachgedacht, vor allem weil wir die grafischen Funktionen von PostGreSQL auch nutzen könnten.
    Vielen Dank noch einmal für die Unterstützung und liebe Grüße.
     
  8. castorp

    castorp Datenbank-Guru

    Du kannst doch einfach ein UNION ALL verwenden:

    Code:
    select *
    from the_table
    union all
    select *
    from the_table
    
    Normalerweise sollte man "select *" nicht verwenden, schon gar nicht in einem UNION, aber da in beiden Teilen des UNION die exakt gleiche Tabelle verwendet wird, ist das nicht so schlimm.

    Es heisst übrigens PostgreSQL, nicht PostGreSQL
     
  9. MoneySoft

    MoneySoft Benutzer

    Ja, lieber castorp, das passt.
    Ist sauber und viel schneller als meine Lösung mit der 2. Tabelle.
    Genial!
    Vielen Dank!
     
  10. akretschmer

    akretschmer Datenbank-Guru

    bei vielen Datensätzen würde ich aber eher von der UNION ALL - Lösung abraten, weil die Tabelle dann 2 mal gelesen werden muß.

    Code:
    test=*# create table s ( i int);
    CREATE TABLE
    test=*# copy s from stdin;
    Enter data to be copied followed by a newline.
    End with a backslash and a period on a line by itself, or an EOF signal.
    >> 1
    >> 2
    >> \.
    COPY 2
    test=*# select demo.* from demo left join  s on true;
     val
    -----
     a
     a
     b
     b
     c
     c
     d
     d
     e
     e
    (10 rows)
    
    Ich hab im Prinzip nur das generate_series(1,2) mit einer fixen Tabelle ersetzt.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden