gruppenweiser Vergleich zweier Tabellen

craven

Benutzer
Beiträge
5
Hallo!

ich hänge nun seit Stunden an einem Problem, das ich nicht lösen kann. Gegeben seien zwei Tabellen:

table_A
Tier
- Fisch
- Hase
- Hund

table_B
Tier Farbe
- Fisch - rot
- Hase - rot
- Hund - blau
- Hase - blau
- Katze - blau
- Fisch - gelb
- Hund - gelb
- Hase - gelb
- Katze - gelb


Die Anfrage: Gebe alle Farben aus, die alle Tiere umfassen, die in table_A vorhanden sind.
In diesem Fall dürfte also nur die Farbe gelb ausgegeben werden, da sowohl Fisch, Hase als auch Hund von dieser Farbe erfasst werden. In diesem Fall muss ich also für jede Farbe einzeln prüfen, ob sie alle Tiere umfasst. Wie mache ich denn eine solche Gruppenprüfung? Die Tiere-Spalten von Table_B sowie Table_A müssen miteinander verglichen werden, und zwar für jede einzelne Farbe. Bin für jede Idee dankbar!

cheers,
craven
 
Werbung:
Hallo!

ich hänge nun seit Stunden an einem Problem, das ich nicht lösen kann. Gegeben seien zwei Tabellen:

table_A
Tier
- Fisch
- Hase
- Hund

table_B
Tier Farbe
- Fisch - rot
- Hase - rot
- Hund - blau
- Hase - blau
- Katze - blau
- Fisch - gelb
- Hund - gelb
- Hase - gelb
- Katze - gelb


Die Anfrage: Gebe alle Farben aus, die alle Tiere umfassen, die in table_A vorhanden sind.
In diesem Fall dürfte also nur die Farbe gelb ausgegeben werden, da sowohl Fisch, Hase als auch Hund von dieser Farbe erfasst werden. In diesem Fall muss ich also für jede Farbe einzeln prüfen, ob sie alle Tiere umfasst. Wie mache ich denn eine solche Gruppenprüfung? Die Tiere-Spalten von Table_B sowie Table_A müssen miteinander verglichen werden, und zwar für jede einzelne Farbe. Bin für jede Idee dankbar!

cheers,
craven


In PG so:

Code:
test=*# select * from craven_a;
 tier
-------
 fisch
 hase
 hund
(3 rows)

Time: 0,149 ms
test=*# select * from craven_b;
 tier  | farbe
-------+-------
 fisch | rot
 hase  | rot
 hund  | blau
 hase  | blau
 fisch | gelb
 hund  | gelb
 hase  | gelb
 katze | gelb
 katze | blau
(9 rows)

Time: 0,198 ms
test=*# select farbe from (select farbe, array_agg(tier) as tiere from craven_b group by farbe) bla where tiere @> (select array_agg(tier) from craven_a);
 farbe
-------
 gelb
(1 row)

Ich weiß aber nicht, ob DB2 solche Funktionen hat.
 
Werbung:
Zurück
Oben