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

Suche SQL-Query

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von knanders, 5 August 2013.

  1. knanders

    knanders Benutzer

    Hallo zusammen,

    manchmal hat man einen Knoten im Kopf und sieht den Wald voller Bäume nicht:

    Ich habe folgendes TabellenBeispiel:

    Id​
    Funk​
    1 1
    1 3
    1 7
    1 9
    2 1
    2 2
    2 3
    3 1
    3 2
    3 4
    3 7

    Aus dieser Tabelle suche ich jetzt die Id, die folgende Funktionswerte mindestens hat: 1,2,7 also in diesem Fall die Id 3. Hat jemand spontan eine Idee?

    Knut
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Code:
    test=*# select * from knanders ;
     id | val
    ----+-----
      1 |   1
      1 |   3
      1 |   7
      1 |   9
      2 |   1
      2 |   2
      2 |   3
      3 |   1
      3 |   2
      3 |   4
      3 |   7
    (11 rows)
    
    Time: 0,177 ms
    test=*# select id, array_agg(val) from knanders group by id having array_agg(val) @> array[1,2,7];
     id | array_agg
    ----+-----------
      3 | {1,2,4,7}
    (1 row)
    
    Das ist aber PostgreSQL. Der @> - Operator schaut, ob das eine Array Bestandteil des anderen ist.

    Es gibt noch mehr Wege, aber dieser ist übersichtlich und flexibel.
     
  3. knanders

    knanders Benutzer

    ... danke für die schnelle Antwort. Ich bräuchte aber die Lösung in MySQL ...
     
  4. akretschmer

    akretschmer Datenbank-Guru

    Tatsächlich? ;-)

    Code:
    test=*# select id from (select * from knanders where val in (1,2,7)) bla group by id having count(id) >= 3;
    id
    ----
      3
    
    bzw.

    Code:
    test=*# select id from (select distinct * from knanders where val in (1,2,7)) bla group by id having count(id) >= 3;
     id
    ----
      3
    (1 row)
    
    Andreas
     
  5. ukulele

    ukulele Datenbank-Guru

    Code:
    SELECT    t0.id
    FROM    tabelle t0
    WHERE    EXISTS (    SELECT    1
                        FROM    tabelle t1
                        WHERE    t1.Funktionswert = 1
                        AND        t1.id = t0.id )
    AND        EXISTS (    SELECT    1
                        FROM    tabelle t2
                        WHERE    t2.Funktionswert = 1
                        AND        t2.id = t0.id )
    AND        EXISTS (    SELECT    1
                        FROM    tabelle t3
                        WHERE    t3.Funktionswert = 1
                        AND        t3.id = t0.id )
    Das geht vermutlich noch eleganter. Ich könnte jetzt auch einfach die Tabelle 3 mal Joinen:
    Code:
    SELECT    t1.id
    FROM    tabelle t1,
            tabelle t2,
            tabelle t3
    WHERE    t1.id = t2.id
    AND        t1.id = t3.id
    AND        t1.Funktionswert = 1
    AND        t2.Funktionswert = 2
    AND        t3.Funktionswert = 7
     
  6. knanders

    knanders Benutzer

    Super - danke - das war es was ich suchte!
     
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