Datensätze absichtlich doppelt darstellen

MoneySoft

Benutzer
Beiträge
5
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.
 
Werbung:
Warum für so etwas die Datenbank quälen statt die Datensätze einfach im Auswertungstool zweimal anzeigen?
 
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.
 
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.
 
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.
 
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
 
Werbung:
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.
 
Zurück
Oben