• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Die Bildungsoffensive hier im Forum geht weiter! Jetzt sollen Kreativität und technische Möglichkeiten einen neue Dimension erreichen. Das Thema in diesem Monat lautet - Verkehrte Welt - Hier geht es lang --> Klick

Ausgabe auch bei nicht zutreffender WHERE Bedingung

  • Ersteller Ersteller fablei
  • Erstellt am Erstellt am

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
 
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.
 
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.
 
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:
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: