1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

gruppenweiser Vergleich zweier Tabellen

Dieses Thema im Forum "DB2" wurde erstellt von craven, 18 Januar 2015.

  1. craven

    craven Benutzer

    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
     
  2. akretschmer

    akretschmer Datenbank-Guru


    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.
     
    craven und Distrilec gefällt das.
  3. ukulele

    ukulele Datenbank-Guru

    Da gibt es einige Wege, meiner wäre z.B.:

    Code:
    SELECT    farbe
    FROM    table_B
    GROUP BY farbe
    HAVING count(*) = (    SELECT    count(*)
                        FROM    table_A )
     
    Walter und craven gefällt das.
  4. craven

    craven Benutzer

    Danke für die Hilfe euch beiden... !
     
    akretschmer gefällt das.

Diese Seite empfehlen