SQL Befehl count() soll auch Nullwerte zurückgeben

Support für weitere IT-Themenbereiche
Antworten
chrsla
Beiträge: 297
Registriert: Mi 03.Okt, 2007 23:09

SQL Befehl count() soll auch Nullwerte zurückgeben

Beitrag 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?
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag 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...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
chrsla
Beiträge: 297
Registriert: Mi 03.Okt, 2007 23:09

Beitrag 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 :-)
Zuletzt geändert von chrsla am So 10.Feb, 2008 19:37, insgesamt 1-mal geändert.
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag 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...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
chrsla
Beiträge: 297
Registriert: Mi 03.Okt, 2007 23:09

Beitrag 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.
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag 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 ;)
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Antworten