group by & count über drei Tabellen
am 07.12.2006 20:28:29 von Stefan Kilp
Hi,
ich habe eine mastertabelle und zwei Detailtabellen
Mastertabelle
id
name
Detail1
id
master_id
...
detail2
id
master_id
...
ich habe bis jetzt die Anzahl der Einträge in Detail1 über
select master.id, count (detail1.id) from mastertable
left join detail1.master_id on master.id
group by master.id
ermittelt. Kann ich das auch für beide Tabellen in einem query formulieren?
select master.id, count(detail1.id), count(detail2.id) from mastertable
left join detail1.master_id on master.id
left join detail2.master_id on master.id
group by maser.id
geht natürlich nicht. Aber wie sonst?
thanks
Re: group by & count über drei Tabellen
am 07.12.2006 23:50:07 von Kai Ruhnau
Stefan Kilp schrieb:
> ich habe eine mastertabelle und zwei Detailtabellen
>
> Mastertabelle
> id
> name
>
> Detail1
> id
> master_id
> ...
>
> detail2
> id
> master_id
> ...
>
> ich habe bis jetzt die Anzahl der Einträge in Detail1 über
>
> select master.id, count (detail1.id) from mastertable
> left join detail1.master_id on master.id
> group by master.id
>
> ermittelt. Kann ich das auch für beide Tabellen in einem query formulieren?
>
> select master.id, count(detail1.id), count(detail2.id) from mastertable
> left join detail1.master_id on master.id
> left join detail2.master_id on master.id
> group by maser.id
>
> geht natürlich nicht. Aber wie sonst?
In diesem einfachen Fall wahrscheinlich mit COUNT(DISTINCT ...).
Wenn es komplizierter wird (SUM o.ä.) mit einem Subselect der Art:
SELECT master.id, count_detail1.counted
FROM master
LEFT JOIN (
SELECT COUNT(...) AS counted, master_id
FROM detail1
GROUP BY master_id
) AS count_detail1 ON count_detail1.master_id=master.id
Alternativ kannst du dir auch direkt eine VIEW der Detail-Tabellen
anlegen und dagegen joinen.
Grüße
Kai
--
This signature is left as an exercise for the reader.
Re: group by & count über drei Tabellen
am 08.12.2006 15:19:36 von Stefan Kilp
Kai Ruhnau schrieb:
> Stefan Kilp schrieb:
>
>> ich habe eine mastertabelle und zwei Detailtabellen
>>
>> Mastertabelle
>> id
>> name
>>
>> Detail1
>> id
>> master_id
>> ...
>>
>> detail2
>> id
>> master_id
>> ...
>>
>> ich habe bis jetzt die Anzahl der Einträge in Detail1 über
>>
>> select master.id, count (detail1.id) from mastertable
>> left join detail1.master_id on master.id
>> group by master.id
>>
>> ermittelt. Kann ich das auch für beide Tabellen in einem query
>> formulieren?
>>
>> select master.id, count(detail1.id), count(detail2.id) from mastertable
>> left join detail1.master_id on master.id
>> left join detail2.master_id on master.id
>> group by maser.id
>>
>> geht natürlich nicht. Aber wie sonst?
>
>
> In diesem einfachen Fall wahrscheinlich mit COUNT(DISTINCT ...).
ja
>
> Wenn es komplizierter wird (SUM o.ä.) mit einem Subselect der Art:
>
> SELECT master.id, count_detail1.counted
> FROM master
> LEFT JOIN (
> SELECT COUNT(...) AS counted, master_id
> FROM detail1
> GROUP BY master_id
> ) AS count_detail1 ON count_detail1.master_id=master.id
>
das ist noch besser ...
> Alternativ kannst du dir auch direkt eine VIEW der Detail-Tabellen
> anlegen und dagegen joinen.
view wird leider von mysql 4 noch nicht unterstützt
vielen Dank für die Hilfe.
gruss stefan
>
> Grüße
> Kai
>