Computerhilfen.de Logo
Forum
Tipps
News
Frage stellen

Datenbankabfrage LEFT JOIN

Hallo,
Ich hoffe, dass es hier auch ein paar Leute mit Datenbankkenntnissen gibt. Das gehört ja auch zum Programmieren dazu ;-)

Vorab:
Datenbank ist MYSQL und läuft auf XAMPP

Ich habe 2 Tabelle termine und termin_arten.

Ich möchte nun eine Auflistung aller termin_arten mit dazugehörigem Dauer aller Termine, die zu dieser Kategorie ghören Das ist eigentlich auch kein Problem:

Hier mal die Strukturen (die wichtigsten Sachen)
Tabelle termine
Felder: ID (int), dauer (int), startzeit (timestamp). termin_art

Tabelle: termin_arten
Felder: ID (int)

SELECT termin_arten.ID as ID, sum(termine.dauer) AS dauer
                         FROM termin_arten
                         LEFT JOIN termine ON termin_arten.ID=termine.termin_art
                         GROUP BY ID   
       
Klappt auch wunderbar
Er zeigt mir alle Terminarten an und die Dauer. Wenn es keine Termine in der Kategorie gibt, zeigt er mir null an. Genauso habe ich mir das vorgestellt.


Jetzt mein Problem: Ich möchte eine WHERE Bedinung einbauen und zwar beispielsweise, dass alle  Termine selektiert werden, die eine startzeit < 342346526 haben.

So jetzt fallen durch diese WHERE Bedinung Termine raus logischerweise.  Aber jetzt zeigt er mir nicht mehr alle Kategorien an mit der Dauer null, wenn keine Termine vorhanden sind, sondern filtert die raus, wo die null stehen müsste.

Beispiel:

SELECT termin_arten.ID as ID, sum(termine.dauer) AS dauer
                         FROM termin_arten
                         LEFT JOIN termine ON termin_arten.ID=termine.termin_art
WHERE startzeit < 34235455
                         GROUP BY ID     

Bei Left Join nimmt er aber doch auf jeden Fall alle Sätze der linken Tabelle oder bin ich auf dem Holzweg? Hat vielleicht jemand eine Idee?


Gruß
der_webi         
« Letzte Änderung: 13.10.10, 16:57:53 von der_webi »

Antworten zu Datenbankabfrage LEFT JOIN:

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

 

Zitat
Bei Left Join nimmt er aber doch auf jeden Fall alle Sätze der linken Tabelle

... das ist richtig, selbst wenn das verknüpfte Feld NULL enthält ...

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Hm also ich habe es mit einem UNION hinbekommen. Aber sehr unschön, wie ich finde...

Vielleicht liegt es auch an MYSQL. Bin mir ziemlich sicher sowas ähnliches mit PostgreSQL in der Uni schonmal gemacht zu haben.


In meinem Programm habe ich es übrigens ohne SQL gelöst sondern ein bisschen mit PHP getrickst ;-)

Gruß
der_webi

Das Problem ist, dass NULL-Werte (also "nicht vorhanden") datenbanktechnisch weder gleich einem Wert sind noch ungleich einem Wert, also natürlich auch nicht kleiner als ein Wert.

Du kannst entweder die Bedingung in den JOIN mit aufnehmen (also LEFT JOIN tabelle ON bedingung AND startzeit < 34235455) oder du musst zusätzlich NULL mit einschließen (WHERE startzeit < 34235455 OR startzeit IS NULL). Da ich mit MySQL noch nicht gearbeitet habe, weiß ich nicht, welche der beiden Methoden funktioniert, aber eine sollte eigentlich gehen.

Hallo,
bin jetzt ja leider ein wenig spät, aber die Methode mit OR würde sich hier anbieten und funktioniert auch.

Zitat
Das Problem ist, dass NULL-Werte (also "nicht vorhanden") datenbanktechnisch weder gleich einem Wert sind noch ungleich einem Wert, also natürlich auch nicht kleiner als ein Wert.
genau so ist es, NULL ist nicht 0

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

So nach ein paar Tagen Abwesenheit vom Computer kann ich zum Abschluss nochmal sagen, dass es mit der OR Methode klappt.

Danke sehr!!!


« Schwierige Programmier Aufgabe. Bräuchte Hilfe!! :)Wie sehen Sie meine persönliche Seite? »
 

Schnelle Hilfe: Hier nach ähnlichen Fragen und passenden Tipps suchen!

Fremdwörter? Erklärungen im Lexikon!
Datenbank
Eine Datenbank (DBS), im englischen database, ist eine strukturierte Datensammlung und fungiert wie ein "digitales Archiv". Datenbanken dienen der effizienten Aufbewahrun...

Eingabefelder
Als Eingabefelder werden in einem Programm oder in Online-Formularen die Stellen bezeichnet, an denen Informationen eingetippt werden können. Die Beschriftung neben ...

Quellcode
Ein Quellcode, auch als Quelltext bekannt, bezeichnet den unkompilierten Programm-Code einer Software. Quell- oder Programm-Code ist der auch für Menschen lesbare Co...