Ein left join
ist richtig, aber Sie brauchen für die types
Erster sein:
SELECT DISTINCT types.type, owners.name, owners.city
FROM tbl_pet_types types LEFT JOIN
tbl_pet_owners owners
ON owners.pet = types.pet
WHERE types.type IN ('mammal', 'fish', 'amphibian', 'seacreature');
Denn das WHERE
-Klausel bezieht sich nur auf tbl_pet_types
, es ändert sich nicht.
Wie left join
funktioniert ist einfach:Es behält alle Zeilen in der ersten Tisch. Nicht übereinstimmende Spalten in der zweiten werden zu NULL
.
BEARBEITEN:
Wenn Sie eine Liste von Typen haben, die nicht in tbl_pet_types
enthalten sind , dann brauchen Sie einen left join
mit allen Werten in einer abgeleiteten Tabelle:
SELECT DISTINCT tt.type, po.name, po.city
FROM (SELECT 'mammal' as type UNION ALL
SELECT 'fish' as type UNION ALL
SELECT 'amphibian' as type UNION ALL
SELECT 'seacreature' as type
) tt left join
tbl_pet_types pt
ON pt.type = tt.type LEFT JOIN
tbl_pet_owners po
ON po.pet = pt.pet;