Seite 1 von 1

SQL Befehl count() soll auch Nullwerte zurückgeben

Verfasst: So 10.Feb, 2008 14:32
von chrsla
Ich habe folgenden SQL Statement
SELECT c.description, count(*) num_occupation, c.occ_class_id FROM TABELLE1 o INNER JOIN TABELLE 2 c ON c.occ_class_id = o.occ_class_id GROUP BY o.occ_class_id;
Dieses Statement klappt wunderbar. Nur habe ich das Problem das er nur die Werte anzeigt in dem die Zahlen alle über 0 sind. Ich will aber auch wissen welche occ_class 0 haben.

Was muss ich machen das ich auch erfahre welche Klasse 0 hat?

Verfasst: So 10.Feb, 2008 18:23
von oxpus
Wie schauen denn die Tabellen überhaupt aus?

Da hier über ID's verknüpft wird, muss in den Feldern auch zumindest ein Wert und nicht NULL enthalten sein. Der Default-Wert NULL führt hierbei also zu keiner Verknüpfung, da keine Werte enthalten sind, das Feld also "nicht vorhanden" ist (so lässt sich NULL noch am ehesten übersetzen).

Dazu muss man dann auch die Logik berücksichtigen, welche Tabelle die "Master"-Tabelle ist, also welche Tabelle denn nun auf jeden Fall einen Wert hat, der in der "Detail"-Tabelle mit abgefragt werden soll.
Da Du hier die occ_class_id aus der 2. gejointen Tabelle holst, werden dann wohl (ohne jetzt die Tabellen und deren Inhalte näher zu kennen) wohl alle 0-Werte in der Haupttabelle nicht angefragt, bzw. dargestellt, da dazu in der Detailtabelle wohl keine Einträge vorhanden sind, oder?
Also muss c.occ_class_id schon einmal durch o.occ_class_id ersetzt werden.
Rein der Logik nach, so wie Du das eben auch zur Gruppierung mit GROUP BY angegeben hast.
Auch holst Du ein weiteres Feld (description) zum Datensatz aus der gejointen Tabelle, so daß ich mich hier eher frage, ob TABELLE 2 nicht der Master ist und TABELLE 1 hierzu nicht besser gejoint werden sollte. ;)

Merke:
Wenn Du 2 Tabelle mit einem Join verbindest, sollten die "Hauptinformationen" immer aus der Tabelle gezogen werden, an die eine andere Tabelle eben hinzu"gejoint" wird.
So würde man z. B. bei einer Beziehung 1:n zwischen Tabelle 1 und Tabelle 2 nicht unbedingt alle Werte aus Tabelle 1 erhalten, wenn in Tabelle 2 eben keine Werte enthalten sind.

Ich weiß, insgesamt ein nicht einfaches Thema, ohne nähere Angaben zu Deinen Tabellen kann man es aber nicht wirklich viel besser erklären...

Verfasst: So 10.Feb, 2008 19:37
von chrsla
Ohje. Dabei war das mit den JOINS in der Berufsschule das Thema was mir am meisten liegte.

Aber was man so alles vergisst wenn man ein Jahr nicht mehr wirklich viel damit zu tun hatte.

Nur zur Erklärung was ich eigentlich vor hatte.

Ich wollte ein Add On das du ja geplant hast umzusetzen im RPG nun selbst machen.

Eben halt das mit den Berufsklassen.

Ich habe eine neue Tabelle erstellt für die Berufsklassen. In dieser Tabelle sind nur zwei Felder drinne. Einmal die ID und die Beschreibung.

Nun gut.

Damit das Modul im phpBB Forum nicht so leer aussieht wollte ich eigentlich bei den Berufsklassen abfragen wieviele Berufe den die selbe Berufsklasse haben.

Das hat ja auch soweit ganz gut geklappt nur werden die Berufsklassen die keine weiteren Berufe haben nicht mit angezeigt. Es werden lediglich die Berufsklassen angezeigt die mindestens einen Beruf haben.

Aber das war mir dann doch ein wenig zu kompliziert da ich das heute noch fertig machen möchte. Also habe ich das weggelassen. Ist eh nichts wichtiges von Bedeutung.

Dennoch vielen Dank für die Hilfe. Auf dich ist eben verlass :-)

Verfasst: So 10.Feb, 2008 23:49
von oxpus
Ohje. Dabei war das mit den JOINS in der Berufsschule das Thema was mir am meisten liegte.
Man lernt eben nie aus ;)
Ich wollte ein Add On das du ja geplant hast umzusetzen im RPG nun selbst machen.
Welches?
Bitte nicht aus dem letzten, denn das wird deutlich umfangreicher, als beschrieben und dauert seine Zeit. Ich möchte dazu eben nicht wieder Anpassungen für eine Anpassung schreiben ;)
Ich habe eine neue Tabelle erstellt für die Berufsklassen. In dieser Tabelle sind nur zwei Felder drinne. Einmal die ID und die Beschreibung.
Warum? Die Berufe sind doch schon definiert und man muss doch nur abfragen, wer welche Berufe hat, um diese zu zählen.
Also Tabelle 1 wären die Berufe und Tabelle 2 die Charakter-Tabelle.
Wenn Du eine Tabelle mit sich selber vergleichst, ist das eh logisch falsch...

Verfasst: Mo 11.Feb, 2008 06:57
von chrsla
Ne das verstehst du vollkommen falsch.

Eine Berufsklasse hat mehrere Berufe wobei ein Beruf nur zu einer Berufsklasse gehört.

Um das aber so zu realisieren brauchte ich ja eine neue Tabelle da es sich hierbei um eine 1:n Beziehung handelt.

Du hast ja im Reallife das auch so das zum Beispiel ein Frauenarzt, ein Zahnarzt, ein Ohrenarzt usw. alle Ärzte sind.

Daher habe ich da eine neue Tabelle erstellen müssen.

Verfasst: Mo 11.Feb, 2008 17:22
von oxpus
Verstanden habe ich das jetzt schon, aber welche Tabellen wolltest Du denn nun vergleichen?
Die Berufsklassen gegen die Berufe?
Warum nicht die verwendeten Berufe?
Also Tabelle der Berufsklassen gegen die Tabelle der Usercharaktere.

Aber immer ausgehend von der Tabelle der Berufsklassen, sonst funktioniert eben die Abfrage nicht 100%ig korrekt, wie Du ja schon festgestellt hast ;)