Une left join
est correct, mais vous avez besoin pour les types
être le premier :
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');
Parce que le WHERE
la clause se réfère uniquement à tbl_pet_types
, ça ne change pas.
Comment left join
fonctionne est simple :il conserve toutes les lignes dans le premier table. Les colonnes sans correspondance dans la seconde deviennent NULL
.
MODIFIER :
Si vous avez une liste de types qui ne sont pas dans tbl_pet_types
, alors vous avez besoin d'une left join
avec toutes les valeurs dans une table dérivée :
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;