group by & count über drei Tabellen

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
>