Suche über mehrere Spalten mit gleichem Wert in einer Spalte

basementmedia

Benutzer
Beiträge
16
Hi,

Ich mach arbeite zwar schon einige Jahre mit MySQL (natürlich nicht jeden Tag;-) Steh bei folgender Sache aber auf dem Schlauch:

Angenommen, ich habe die folgenden Datensätze in der Tabelle "Personen":

ID sub_id person_a person_b
________________________________________
1 A Daniel 0
2 A 0 Tim
3 B Andrea 0
4 B 0 Stefan
5 C Daniel 0
6 C 0 Tim
7 C Chris 0
8 D Daniel 0

Thema dieses Posts soll nicht sein, warum die Datenbanktabelle so strukturiert ist (denn daran kann ich in dem Fall nichts ändern),
sondern wie ich die folgende Abfrage ausführen kann:

"Finde mir alle Datensätze, in denen Daniel und Tim mit der gleichen sub_id eingetragen sind, gruppiert nach sub_id".

Ergebnis sollte sein: A und C

Wenn ich das hier mache, hab ich korrekterweise als Ergebnis: A, C, und D:

SELECT
sub_id
FROM persons
WHERE person_a = Daniel OR person_b = Tim
GROUP BY sub_id


D.h. ich denke ich brauche etwas wie

SELECT
sub_id
FROM persons
WHERE person_a = Daniel OR person_b = Tim
HAVING die gleiche sub_id
GROUP BY sub_id

Und an dieser Stelle endet mein Wissen (oder es ist total simpel und ich steh einfach auf dem Schlauch.
Kann mir jemand vom Schlauch runter helfen?

LG Daniel
 
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.933
Code:
postgres=# select * from basementmedia ;
 id | subid |   pa   |   pb   
----+-------+--------+--------
  1 | a     | daniel | 0
  2 | a     | 0      | tim
  3 | b     | andrea | 0
  4 | b     | 0      | stefan
  5 | c     | daniel | 0
  6 | c     | 0      | tim
  7 | c     | chris  | 0
  8 | d     | daniel | 0
(8 rows)

postgres=# with foo as (select * from basementmedia where pa in ('daniel','tim') or pb in ('daniel','tim')) select subid, count(*) from foo group by subid having count(*) = 2;
 subid | count 
-------+-------
 a     |     2
 c     |     2
(2 rows)

postgres=#
 
Werbung:

basementmedia

Benutzer
Beiträge
16
Perfekt. Folgendes funktioniert:
select subid, count(*) from
(select * from basementmedia where pa in ('daniel','tim') or pb in ('daniel','tim')) a
group by subid having count(*) = 2
 
Oben