Mysql
 sql >> Base de données >  >> RDS >> Mysql

Inclure des valeurs NOT FOUND dans les résultats de la requête MySQL

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;