Moin, ich habe ein Sache, die ich mir nicht erklären kann. Ich hab eine Abfrage, die 3 Tabellen mit einbezieht. (T1,T2,T3).
SELECT Count(T1.id) AS AnzahlvonT1
FROM T1 INNER JOIN (T2 INNER JOIN T3 ON T2.id = T3.T2_id) ON T1.id = T2.T1_id
WHERE (((T1.sys_eing_dat) Between #1/1/2012# And #1/3/2012#) AND ((T3.Rechnungsnr)<>889));
Nun bekomme ich 2 verschiedene Ergebnisse, wenn ich mich mit Count arbeite, oder mir alle IDs ohne Count ausgeben lassen, die Anzahl also so nachgucke. Den Fehler habe ich auch schon gefunden, wenn ich mit Count abfrage, dann zählt er alle Tupel (T1.id,T2.id,T3.id) und somit doppelte T1.ids.
Wenn ich ohne Count arbeite, dann zählt er auch wirklich nur die IDs der T1. Ist das so gewollt? Die Count-Funktion erscheint mir dann in dem Zusammenhang ziemlich sinnlos :/
Gruß
Hallo,
schreib mal:
SELECT Count(*) AS AnzahlvonT1 ...
Hm kommt noch immer die falsche Anzahl raus
ZitatWenn ich ohne Count arbeite, dann zählt er auch wirklich nur die IDs der T1. Ist das so gewollt? Die Count-Funktion erscheint mir dann in dem Zusammenhang ziemlich sinnlos :/
In meiner bescheidenen Vorstellung wird ohne Count gar nicht gezählt!
Count zählt in der gegebenen Datensatzgruppe, dabei Count(*) die Datensätze und Count(Feld) die Anzahl des Vorkommens eines Wertes im betreffenden Feld, Null wird dabei nicht mitgezählt. Da eine ID vermutlich nicht Null ist, dürfte oben das Ergebnis gleich sein.
Wenn Du die Anzahl der T1.id ohne Duplikate haben willst, müsstest Du zusätzlich geeignet gruppieren oder gleich nur in der entsprechenden Datensatzgruppe (Tabelle) zählen:
SELECT Count(T1.id) AS X
FROM T1Beim Coden auch schon denken und dabei den gesunden Menschenverstand nicht ausschalten!
MfGA
ebs
Nur in der Tabelle T1 zählen geht nicht, da ich ja noch die Bedingung aus T3 brauche..
Ich hab exakt den gleichen Code, einmal mit Count und einmal ohne. Da sollte man doch denken, dass die gleiche Anzahl rauskommt oder nicht!?
Ich lasse es nun einfach bei einer Kreuztabelle, die sich auf die Abfrage ohne Count bezieht.
Hallo henfoni,
Hast Du das
ZitatCount zählt in der gegebenen Datensatzgruppe, dabei Count(*) die Datensätze und Count(Feld) die Anzahl des Vorkommens eines Wertes im betreffenden Feld
nicht gelesen oder nicht verstanden?
Hast Du
SELECT Count(*) AS AnzahlvonT1
FROM T1 INNER JOIN (T2 INNER JOIN T3 ON T2.id = T3.T2_id) ON T1.id = T2.T1_id
WHERE (((T1.sys_eing_dat) Between #1/1/2012# And #1/3/2012#) AND ((T3.Rechnungsnr)<>889));mal ausprobiert?
gruss ekkehard
Moin,
ich bin schon selten dämlich. Hat sich alles erledigt, habe das Group by bei der Zählung ohne Count übersehen.
Danke für eure Mühen+Geduld