sql >> Base de Datos >  >> RDS >> Mysql

Incluir valores NO ENCONTRADOS en los resultados de la consulta de MySQL

Una left join es correcto, pero lo necesita para los types ser el primero:

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');

Porque el WHERE cláusula se refiere sólo a tbl_pet_types , no cambia.

Cómo left join funciona es simple:mantiene todas las filas en el primero mesa. Las columnas no coincidentes en el segundo se convierten en NULL .

EDITAR:

Si tiene una lista de tipos que no están en tbl_pet_types , entonces necesitas una left join con todos los valores en una tabla derivada:

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;