where h.sex='m' and and em.milsign='Y'
eine „implizite innere Verknüpfung“ verursacht, dass einige Abteilungen verstecken wenn in den linken verbundenen Tabellen keine übereinstimmenden Zeilen vorhanden sind. Ändern Sie beide Bedingungen beitreten statt:
SELECT
d.fullname
, COUNT(h.isn)
FROM subdept d
LEFT JOIN subhuman h ON d.isn = h.deptisn AND h.sex = 'М'
LEFT JOIN subject j ON h.isn = j.isn
LEFT JOIN emilitary em ON j.isn = em.emplisn AND em.milsign = 'Y'
GROUP BY ROLLUP
d.fullname
;
oder, können Sie die where-Klausel ändern könnte NULLs erlauben durch die Join-Bedingungen neu abgestimmt werden:
SELECT
d.fullname
, COUNT(h.isn)
FROM subdept d
LEFT JOIN subhuman h ON d.isn = h.deptisn
LEFT JOIN subject j ON h.isn = j.isn
LEFT JOIN emilitary em ON j.isn = em.emplisn
WHERE (h.sex = 'М' OR h.sex IS NULL)
AND (em.milsign = 'Y' OR em.milsign IS NULL)
GROUP BY ROLLUP
d.fullname
;
Oder wenden Sie die gewünschte Filterung innerhalb einer Unterabfrage:
SELECT
d.fullname
, COUNT(h.isn)
FROM subdept d
LEFT JOIN (
SELECT
h.isn
, h.deptisn
FROM subhuman h
LEFT JOIN subject j ON h.isn = j.isn
LEFT JOIN emilitary em ON j.isn = em.emplisn
WHERE h.sex = 'М'
AND em.milsign = 'Y'
) h ON d.isn = h.deptisn
GROUP BY ROLLUP
d.fullname
;
"untermenschlich" lol! – ADyson
Die meisten Leute wollen hier formatierten Text, keine Bilder. – jarlh
danke für Kommentare Majestäten! Ich werde in Betracht ziehen –