Hallöchen! Ich hätt’ da mal 'ne Frage
Ich möchte mir die Schauspieler & Schauspielerinnen meiner FilmDB nach Nation gezählt anzeigen lassen.
Dazu frage ich folgende drei Tabellen ab:
nation actor actress
+-----------+---------+ +-----------------+-----------+ +-------------------+-----------+
| nation_id | country | | name | nation_id | | name | nation_id |
+-----------+---------+ +-----------------+-----------+ +-------------------+-----------+
| 1 | FRA | | Jason Statham | 2 | | Frances McDormand | 3 |
| 2 | GBR | | Christopher Lee | 2 | | Sean Young | 3 |
| 3 | USA | | Vincent Cassel | 1 | | Julie Delpy | 1 |
| 4 | DEU | | Robert De Niro | 3 | | Helen Mirren | 2 |
| ... | ... | | ... | ... | | ... | ... |
+-----------+---------+ +-----------------+-----------+ +-------------------+-----------+
Wenn ich mit folgender Abfrage nur EINE Tabelle JOINe:
SELECT n.country
,count(a.nation_id) AS count_actor
FROM nation n
LEFT JOIN actor a USING (nation_id)
GROUP BY n.country
ORDER BY n.country;
erhalte ich das gewünschte Resultat:
+---------+-------------+
| country | count_actor |
+---------+-------------+
| DEU | 0 |
| FRA | 1 |
| GBR | 2 |
| USA | 1 |
+---------+-------------+
Wenn ich aber mit dieser Query die Damen als ZWEITE Tabelle dazuJOINe:
SELECT n.country
,count(a.nation_id) AS count_actor
,count(b.nation_id) AS count_actress
FROM nation n
LEFT JOIN actor a USING (nation_id)
LEFT JOIN actress b USING (nation_id)
GROUP BY n.country
ORDER BY n.country;
stimmen die Zahlen nicht mehr. Zumindest in den Zeilen, in denen es actors UND actresses gibt… also z.B.:
Habe ich zwei italienische Schauspieler (aber keine ital. Schauspielerin) wird mir korrekt “count_actor” = 2, “count_actress” = 0 angezeigt.
Habe ich jetzt aber z.B. zwei Amerikaner UND eine Amerikanerin kommt nicht “count_actor” = 2 UND “count_actress” = 1 zurück,
sondern eine Zahl, die ich nicht nachvollziehen kann… z.B. “count_actor” = 7 UND “count_actress” = 7 (erstaunlicherweise die Selbe).
Was verpasse ich denn da? Bzw., welchen Denkfehler bau’ ich da ein? (Version: Postgres 9.3.6, OS: Fedora, Wissensstand: Hobbyist )
LG, cornfed.