MySQL: left join mit where

karl123

Erfahrenes Mitglied
Hallo allerseits,

Ist der folgende Syntax richtig?
SELECT componentname FROM component
LEFT JOIN program ON component.id_program = program.id WHERE program.name = 'xyz'
LEFT JOIN customer ON program.id_customer = customer.id WHERE customer.name = 'meier'

Oder
Wie schaffe ich es, nach dem LEFT JOIN mehr als eine Bedingung anzugeben und danach ein weiteres LEFT JOIN zu erstellen?

Karl
 
SQL:
SELECT 
   componentname 
FROM 
   component
LEFT JOIN 
   program 
ON 
   component.id_program = program.id 
LEFT JOIN 
   customer 
ON 
   program.id_customer = customer.id 
WHERE 
   customer.name = 'meier'
   AND 
   program.name = 'xyz';

PS: brauche auch aliases und gib somit an, woher componentname stammt...
 
Zuletzt bearbeitet von einem Moderator:
Danke für die Hilfe.
Ich hatte irgendwie gemeint, dass die WHERE Klausel jeweils zum LEFT JOIN gehört.

Karl
 
subqueries

SQL:
SELECT 
   componentname 
FROM 
   component cp
LEFT JOIN 
   (SELECT id, id_customer FROM program WHERE name = 'xyz') p
ON 
   cp.id_program = p.id 
LEFT JOIN 
   (SELECT id FORM customer WHERE name = 'meier') c
ON 
   p.id_customer = c.id;


oder dann so (aber das sollte man eigentlich besser nicht tun)
SQL:
SELECT 
   componentname 
FROM 
   component
LEFT JOIN 
   program 
ON 
   component.id_program = program.id AND program.name = 'xyz'
LEFT JOIN 
   customer 
ON 
   program.id_customer = customer.id AND customer.name = 'meier';


Aber was ist eigentlich die Fagestellung die du lösen willst? Respektive das Problem?
 
Zuletzt bearbeitet von einem Moderator:
Was du evtl. auch noch bedenken musst, ist ob du die failed left joins auch haben willst, denn dann muss das ganze so aussehen (oder brauchst du den left join gar nicht wirklich?):
SQL:
SELECT 
   componentname 
FROM 
   component
LEFT JOIN 
   program 
ON 
   component.id_program = program.id 
LEFT JOIN 
   customer 
ON 
   program.id_customer = customer.id 
WHERE 
   (customer.name = 'meier' OR customer.name IS NULL)
   AND 
   (program.name = 'xyz' OR program.name IS NULL);

Sag dann bescheid welcher Code für dich der richtige war.
 
Zuletzt bearbeitet von einem Moderator:
Zurück