MySQL select über mehrere Tabellen

sorry für die späte antwort, hatte ein URE.
also..
die haupttabelle meiner db ist die tabelle pferde. dort sind alle pferde unterschiedlicher rassen gelistet, diese rassen haben unterschiedliche rassenspezifische felle.
in Kurzform:
pferdeanzahl = 100,
davon sind 30 Hannoveraner,
20 Araber,
50 Shetlandponys.
jede rasse kommt in unterschiedlichen farben daher,
z. B. Hannoveraner: Rappe, Brauner, Fuchs,
Araber: Rappe, Fuchs, Hellgrau,
Pony: Fuchs, Hellgrau, Palomino

daher gibt es eine Tabelle aller Pferde mit rid und cid,
eine Tabelle aller Rassen mit rid und cid(wo die rassenspezifischen felle zugeteilt sind) und
eine Tabelle aller überhaupt möglichen Felle aller Rassen mit cid (wo man die cid einem bestimmten fell zuordnen kann) .

ich möchte letztendlich wissen: wieviel pferde der rasse hannoveraner gibt es, die a) Rappe, b) Brauner c) Fuchs usw. sind
hilft dir das erklärungsweise weiter?

Muster:
tabelle pferde:
id=1, pferd='hotte', rid= 20(Hannoveraner), cid=15('brauner');
id=2, pferd='hü', rid= 15(Araber),cid=2(Rappe) usw.

tabelle rassenfelle:
id=1, rasse=20(hannoveraner), cid=15(brauner),
id=2, rasse=20(hannoveraner),cid=2(rappe),
id=3, rasse=15(araber),cid=2(rappe),...usw.

tabelle farben:
id=15, farbe=brauner,
id=2, farbe=rappe,
id=3, farbe=Fuchs...usw
 
Zuletzt bearbeitet:
Werbung:
also sowas wie:

Code:
edb=# create table pferde(id int generated always as identity primary key, name text, rasse int, farbe int);
CREATE TABLE
edb=*# insert into pferde (name, rasse, farbe) select 'pferd'||s::text, (random()*5)::int, (random()*9)::int from generate_series(1,20) s;
INSERT 0 20
edb=*# select * from pferde;
 id |  name   | rasse | farbe 
----+---------+-------+-------
  1 | pferd1  |     4 |     1
  2 | pferd2  |     1 |     5
  3 | pferd3  |     4 |     2
  4 | pferd4  |     0 |     0
  5 | pferd5  |     0 |     8
  6 | pferd6  |     4 |     5
  7 | pferd7  |     2 |     6
  8 | pferd8  |     3 |     7
  9 | pferd9  |     0 |     6
 10 | pferd10 |     3 |     5
 11 | pferd11 |     4 |     1
 12 | pferd12 |     3 |     1
 13 | pferd13 |     4 |     5
 14 | pferd14 |     2 |     2
 15 | pferd15 |     0 |     9
 16 | pferd16 |     0 |     4
 17 | pferd17 |     3 |     8
 18 | pferd18 |     4 |     8
 19 | pferd19 |     5 |     3
 20 | pferd20 |     1 |     1
(20 rows)
edb=*# select farbe, count(*) from pferde where rasse = 1 group by farbe;
 farbe | count 
-------+-------
     1 |     1
     5 |     1
(2 rows)

hannoveraner sei hier rasse=1, und den nötigen JOIN mit der Farbtabelle überlasse ich Dir zur Übung.

Was ist ein URE?
 
das war das, was ich ursprünglich (gestern gegen mittag) auch raus hatte, aber das zeigt mir nicht, ob ich alle felle jeder rasse schon habe. sprich: wenn es kein pferd der rasse hannoveraner gibt, der das fell palomino hat. ich muss es also anhand der möglichen rassenfelle festmachen
 
irgendwie ist mein letzter post gestern verschwunden, also hier nochmal:
Meine Tabellen sehen wie folgt aus:
Muster:
tabelle pferde:
id=1, pferd='hotte', rid= 20(Hannoveraner), cid=15('brauner');
id=2, pferd='hü', rid= 15(Araber),cid=2(Rappe) usw.

tabelle rassenfelle:
id=1, rasse=20(hannoveraner), cid=15(brauner),
id=2, rasse=20(hannoveraner),cid=2(rappe),
id=3, rasse=15(araber),cid=2(rappe),...usw.

tabelle farben:
id=15, farbe=brauner,
id=2, farbe=rappe,
id=3, farbe=Fuchs...usw

Die Tabelle rassenfelle ist eine art hilfstabelle, mit der ich bestimme, welche Fellfarben in einer bestimmten Rasse vorkommen können (dies brauche ich für andere Auswertungen).

Jetzt und hier möchte ich wissen, ob und wieviele Pferde in der Tabelle Pferde sind, die die Felle der Rasse Hannoveraner (rid=20) besitzen. Es kann also auch 0 sein, wenn z.B. kein Hannoveraner mit dem Fell Schimmel in der Tabelle Pferde vorhanden ist.
 
Werbung:
Moah, ich glaube, ich habs:

select farben.farbe,count(pferde.cid from farben
left join rassenfelle on farben.id = rassenfelle.cid
left join pferde on (rassenfelle.cid = pferde.cid and pferde.rid=20)
where rassenfelle.rid=20 group by farbe

das zeigt mir auch die Null-werte an :)
Danke für deine Gedankenstützen!!!
 
Zurück
Oben