• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Es regnet, ist neblig und kalt, alle sind krank und der Chef wird zunehmend cholerisch. Das Thema des Monats ist also folgerichtig --> Das Grau(en)
    Wir sind gespannt, war Euch dazu einfällt! Zum Wettbewerb --> Klick

Ausgabe auch bei nicht zutreffender WHERE Bedingung

fablei

Gast
Hallo,
Code:
Select schule.schulname,count(protokoll_schule.schul_id) 
From schule,protokoll_schule 
WHERE schule.id=protokoll_schule.schul_id  
Group by schule.schulname
Die Tabelle schule hat 1207 Einträge. Die Tabelle protokoll_schule hat aber nicht zu jeder Schule einen Eintrag, ergo kommt als Ergebnis nur der COUNT() von 981 Schulen raus.

Wie schaffe ich es, auch die Schulen auszugben, bei denen die WHERE - Bedingung nicht zutrifft?

Vielen Dank,
FAbian
 

ma.buso

Châtaigne du Léman
Registriert
16.04.05
Beiträge
820
Hallo,
Code:
Select schule.schulname,count(protokoll_schule.schul_id) 
From schule,protokoll_schule 
WHERE schule.id=protokoll_schule.schul_id  
Group by schule.schulname
Die Tabelle schule hat 1207 Einträge. Die Tabelle protokoll_schule hat aber nicht zu jeder Schule einen Eintrag, ergo kommt als Ergebnis nur der COUNT() von 981 Schulen raus.

Wie schaffe ich es, auch die Schulen auszugben, bei denen die WHERE - Bedingung nicht zutrifft?

Vielen Dank,
FAbian

aus
Code:
WHERE schule.id=protokoll_schule.schul_id

mach
Code:
WHERE 1

- Dann sollte er alle Schulen ausgeben.
 

fablei

Gast
Vielen Dank für deine Antwort,
aber leider funktioniert dein Lösungsvorschlag nicht.

Er gibt jetzt zwar alle Schulen aus, allerdings als Anzahl nun nicht mehr die zugehörige Anzahl der portokoll_schule Tabelle, sondern immer die volle Anzahl der protokoll_schule Tabelle.

Ist ja auch klar, denn woher soll SQL jetzt wissen welche Protokolle welcher Schule zugeordnet werden.
 

VollPfosten

Roter Delicious
Registriert
01.11.05
Beiträge
94
Du kannst ein Deine Abfrage anhängen:

Code:
UNION SELECT schulname,0 FROM schule WHERE id NOT IN (SELECT schul_id FROM protokoll_schule);
 
Zuletzt bearbeitet:

Hack

Granny Smith
Registriert
17.11.04
Beiträge
16
oder Du versuchst es einfach mal so:

Code:
SELECT schule.schulname, 
       COUNT( protokoll_schule.schul_id ) AS anzahl
FROM schule 
  LEFT JOIN protokoll_schule ON ( schule.id = protokoll_schule.schul_id )
Group by schule.schulname

dann holst Du alle Schulen und jeweils die Protokolle dazu. Gibt es kein Protokoll für eine Schule, sollte als COUNT ne 0 rauskommen.

Ich habs jetzt nicht getestet, aber sollte eigentlich richtig sein ;)
 
Zuletzt bearbeitet: