Hallo zusammen,
Ich bin Postgres Neuling und auf der Suche nach einem SQL Befehl. Folgende Datensätze sind in der Datenbank gespeichert:
Felder: Lager_ID, Box_ID, Farbe_ID, Inhalt
Lager_ID Box_ID Farbe_ID Inhalt
Lager_1 Box_1 schwarz 12
Lager_1 Box_2 schwarz 13
Lager_1 Box_3 weiss 14
Lager_1 Box_4 schwarz 15
Lager_1 Box_5 schwarz 16
Lager_1 Box_6 schwarz 17
Lager_2 Box_3 schwarz 18
Lager_2 Box_5 schwarz 19
Lager_2 Box_6 schwarz 20
Lager_2 Box_10 schwarz 21
Lager_2 Box_11 schwarz 22
Lager_2 Box_12 schwarz 23
Lager_3 Box_1 schwarz 24
Lager_3 Box_5 schwarz 25
Lager_3 Box_6 schwarz 26
Lager_4 Box_7 schwarz 27
Lager_5 Box_8 schwarz 28
Lager_6 Box_9 schwarz 29
Mit welchem SQL Befehl finde ich die Boxen nur aus Lager_1 und Lager_2, die schwarz sind und die übereinstimmende Box_IDs haben? Die Ausgabe soll also folgendermasen aussehen:
Lager_1 Box_5 schwarz 16
Lager_1 Box_6 schwarz 17
Lager_2 Box_5 schwarz 19
Lager_2 Box_6 schwarz 20
Danke schon im Voraus für jede Idee
Gruß
Ludwig
heinrichen:
Hallo zusammen,
Ich bin Postgres Neuling und auf der Suche nach einem SQL Befehl. Folgende Datensätze sind in der Datenbank gespeichert:
Felder: Lager_ID, Box_ID, Farbe_ID, Inhalt
Lager_ID Box_ID Farbe_ID Inhalt
Lager_1 Box_1 schwarz 12
Lager_1 Box_2 schwarz 13
Lager_1 Box_3 weiss 14
Lager_1 Box_4 schwarz 15
Lager_1 Box_5 schwarz 16
Lager_1 Box_6 schwarz 17
Lager_2 Box_3 schwarz 18
Lager_2 Box_5 schwarz 19
Lager_2 Box_6 schwarz 20
Lager_2 Box_10 schwarz 21
Lager_2 Box_11 schwarz 22
Lager_2 Box_12 schwarz 23
Lager_3 Box_1 schwarz 24
Lager_3 Box_5 schwarz 25
Lager_3 Box_6 schwarz 26
Lager_4 Box_7 schwarz 27
Lager_5 Box_8 schwarz 28
Lager_6 Box_9 schwarz 29
Mit welchem SQL Befehl finde ich die Boxen nur aus Lager_1 und Lager_2, die schwarz sind und die übereinstimmende Box_IDs haben? Die Ausgabe soll also folgendermasen aussehen:
Lager_1 Box_5 schwarz 16
Lager_1 Box_6 schwarz 17
Lager_2 Box_5 schwarz 19
Lager_2 Box_6 schwarz 20
Danke schon im Voraus für jede Idee
Gruß
Ludwig
test=*# select * from heinrichen ;
lager_id | box_id | farbe_id | inhalt
----------+--------+----------+--------
Lager_1 | Box_1 | schwarz | 12
Lager_1 | Box_2 | schwarz | 13
Lager_1 | Box_3 | weiss | 14
Lager_1 | Box_4 | schwarz | 15
Lager_1 | Box_5 | schwarz | 16
Lager_1 | Box_6 | schwarz | 17
Lager_2 | Box_3 | schwarz | 18
Lager_2 | Box_5 | schwarz | 19
Lager_2 | Box_6 | schwarz | 20
Lager_2 | Box_10 | schwarz | 21
Lager_2 | Box_11 | schwarz | 22
Lager_2 | Box_12 | schwarz | 23
Lager_3 | Box_1 | schwarz | 24
Lager_3 | Box_5 | schwarz | 25
Lager_3 | Box_6 | schwarz | 26
Lager_4 | Box_7 | schwarz | 27
Lager_5 | Box_8 | schwarz | 28
Lager_6 | Box_9 | schwarz | 29
(18 rows)
Time: 0,191 ms
test=*# select * from heinrichen where lager_id in ('Lager_1','Lager_2') and farbe_id = 'schwarz' and box_id in (select box_id from heinrichen where lager_id = 'Lager_1' and farbe_id = 'schwarz' intersect select box_id from heinrichen where lager_id = 'Lager_2' and farbe_id = 'schwarz');
lager_id | box_id | farbe_id | inhalt
----------+--------+----------+--------
Lager_1 | Box_5 | schwarz | 16
Lager_1 | Box_6 | schwarz | 17
Lager_2 | Box_5 | schwarz | 19
Lager_2 | Box_6 | schwarz | 20
(4 rows)
Hallo akretschmer,
besten Dank für die schnelle Hilfe. Klappr wunderbar !!!
Ich übertrage das Morgen früh auf die Produktivdatenbank mit 5 mio Einträgen. Ich hoffe die Performance geht einigermassen.
Ich melde mich dazu nochmal.
Gruß
Ludwig
heinrichen:
Hallo akretschmer,
besten Dank für die schnelle Hilfe. Klappr wunderbar !!!
Ich übertrage das Morgen früh auf die Produktivdatenbank mit 5 mio Einträgen. Ich hoffe die Performance geht einigermassen.
Ich melde mich dazu nochmal.
Gruß
Ludwig
Nutze Explain. Indexe auf farbe_id und (lager_id, farbe_id) könnten sinnvoll sein.
Klappt prima, auch in der Produktionsdatenbank. Indexe mit var_ops ertsellt.
Vielen Dank