Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Count mit Join über mehrere table (https://www.delphipraxis.net/68873-count-mit-join-ueber-mehrere-table.html)

monta 7. Mai 2006 08:04

Datenbank: Firebird embedded • Version: 1.5 • Zugriff über: IbExpert/Zeos

Count mit Join über mehrere table
 
Hallo,
ich hab eine Frage zur anwednung von Counts über mehrere Tabellen. Die Sache liegt wie folgt:

Ich habe 3 Tabellen:
Code:
Tabelle 1
id Daten...
1  zhn
2  sdfvb
3  cfgf
Code:
Tabelle 2
id id_tabelle1 Daten...
1     1        dfgh
2     3        jöpk
3     3        huhui
Code:
Tabelle 2
id id_tabelle1 Daten...
1     2        dfgh
2     3        jöpk
3     3        hjkhj
4     3        gzj
Nun wollte ich mittels eines Selects direkt die Tabelle eins abrufen und dazu jeweils die Anzahl der verbundenen Datensätze aus den anderen beiden Tabellen, welche sich auf tabelle1 beziehen.

versucht hab ich es damit:
SQL-Code:
SELECT DISTINCT (tabelle1.daten),
            COUNT (tabelle2.id) AS tabelle2anzahl,
            COUNT (tabelle3.id) AS tabelle3anzahl
     FROM tabelle1 LEFT JOIN tabelle2  ON tabelle1.id = tabelle2.id_tabelle1
          LEFT JOIN tabelle2 ON tabelle1.id = tabelle2.id_tabelle1 GROUP BY tabelle1.daten
Das liefert allerdings nur die richtigen Werte, wenn eines der beiden Count 0 zurückgibt.

Also für die ersten beiden Datensätze aus tabelle1 wird korrekt wiedergegeben.
Das Problem liegt im dritten, wenn beide Tabellen auf tabelle1 verweisen, werden die beiden Counts scheinbar addiert und zurückgegeben werden :
Code:
zhn 1  0   //stimmt
sdfvb 0  1   //stimmt
cfgf 6  6   //stimmt nicht, da es 2 und 3 heißen müsste.
Wie kann man dieses Problem nun umgehen?, sodass es möglichst noch eine einzelne Abfrage bleibt?

alzaimar 7. Mai 2006 08:20

Re: Count mit Join über mehrere table
 
Das mit den Joins funktioniert manchmal nicht so, wie man es erwartet. Bei Deinem Problem würde ich Folgendes versuchen:
SQL-Code:
Select Daten,
  (select count (*) from Tabelle2 where Tabelle2.ID_Tabelle1 = Tabelle1.ID) as Cnt2,
  (select count (*) from Tabelle3 where Tabelle3.ID_Tabelle1 = Tabelle1.ID) as Cnt3
from Tabelle1

monta 7. Mai 2006 08:47

Re: Count mit Join über mehrere table
 
Super, danke.
Jetzt funktioniert es.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:50 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz