Filtern von Datensätzen

Tom Weber

Benutzer
Beiträge
9
Hallo zusammen,

ich möchte aus folgender Tabelle (Beispiel) diejenigen Datensätze filtern, zu deren eindeutigen ID mindestens ein Nachfolger (Ausprägung ist 1) existiert.

counter | ID| Nachfolger
--------------
1 | 1 | 0
2 | 1 | 0
3 | 2 | 0
4 | 2 | 1
5 | 3 | 0
6 | 3| 0
7 | 3 | 1

Der Output sollte der folgende sein:

counter | ID| Nachfolger
--------------
3 | 2 | 0
4 | 2 | 1
5 | 3 | 0
6 | 3| 0
7 | 3 | 1

Danke für Eure Hilfe! :)
 
Werbung:
Code:
test=*# select * from tom_weber ;
 counter | id | nachfolger
---------+----+------------
       1 |  1 |          0
       2 |  1 |          0
       3 |  2 |          0
       4 |  2 |          1
       5 |  3 |          0
       6 |  3 |          0
       7 |  3 |          1
(7 rows)

test=*# select * from tom_weber where id in (select id from tom_weber where nachfolger = 1);
 counter | id | nachfolger
---------+----+------------
       3 |  2 |          0
       4 |  2 |          1
       5 |  3 |          0
       6 |  3 |          0
       7 |  3 |          1
(5 rows)

test=*#

Das ist möglicherweise so einfach, daß das sogar MySQL out-of-the-box kann, ich verwende PostgreSQL.
 
Super, danke - das hat mir schon mal geholfen.

Jetzt werden aber auch die Datensätze gefiltert, bei denen Nachfolger gleich 1 ist, jedoch kein Datensatz mit Nachfolger gleich 0 vorliegt. Also sozusagen einzelne Datensätze mit Nachfolger gleich 1.

Ich will also wirklich nur die Datensätze haben, zu denen für eine eindeutige ID mindestens ein Datensatz mit Nachfolger gleich 1 und mindestens ein Datensatz mit Nachfolger gleich 0 vorliegt.

Wie kann ich die selektieren aus deiner Selektion in einer zweiten Abfrage?
 
Werbung:
hilft dies:

Code:
test=*# select * from tom_weber ;
 counter | id | nachfolger
---------+----+------------
       1 |  1 |          0
       2 |  1 |          0
       3 |  2 |          0
       4 |  2 |          1
       5 |  3 |          0
       6 |  3 |          0
       7 |  3 |          1
(7 rows)

test=*# select id from tom_weber where id in (select id from tom_weber where nachfolger in (0,1)) group by id having count(distinct nachfolger) = 2;
 id
----
  2
  3
(2 rows)

test=*#
 
Zurück
Oben