Matthias Apsel: Teilmengen Lösung ohne temporäre Tabelle

Beitrag lesen

Om nah hoo pez nyeetz, alle!

Von dedlfix habe ich eine Lösung erhalten, die ohne eine temporäre Tabelle auskommt.

SELECT  
	s.Name,  
	s.Vorname,  
	a.Text,  
	a.Kategorie  
FROM  
	Schüler s  
LEFT JOIN  
	Kreuztabelle k  
	ON k.SchülerID = s.ID AND  
	k.Status = 'o' AND  
	k.Erlass_k = 0 AND  
	k.Erlass_n = 0 AND  
	EXISTS (  
                SELECT  
                        *  
                FROM  
                        Aufgaben a  
                WHERE  
                        a.ID = k.AufgabenID AND  
                        a.Fälligkeit < '2014-03-10'  
               )  
LEFT JOIN  
        Aufgaben a ON a.ID = k.AufgabenID  
WHERE  
        s.Klasse = 29

Diese Abfrage liefert zunächst einmal alle Ergebnissätze Schüler - offene Aufgaben. Für die Schüler ohne offene Aufgaben schlägt das SELECT innerhalb von EXISTS fehl, weshalb dann Ergebnissätze

Name, Vorname, NULL, NULL  

entstehen, die sich in PHP von einander trennen lassen:

while ($mahnung = $stmt -> fetch(PDO::FETCH_ASSOC)) {  
    if($mahnung['Text'] != '') {  
        // Schüler mit offenen Aufgaben  
    }  
    else {  
        // Schüler ohne offene Aufgaben  
    }  
}

Matthias

--
Der Unterschied zwischen Java und JavaScript ist größer als der zwischen Mona und Monaco.