Suche SQL-Query

knanders

Benutzer
Beiträge
5
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
 
Werbung:
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

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.
 
... danke für die schnelle Antwort. Ich bräuchte aber die Lösung in MySQL ...

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
 
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
 
Werbung:
Zurück
Oben