Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Incluindo valores NOT FOUND nos resultados da consulta MySQL


Uma left join está correto, mas você precisa dos types ser o primeiro:
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 o WHERE cláusula refere-se apenas a tbl_pet_types , não muda.

Como a left join funciona é simples:mantém todas as linhas no primeiro tabela. Colunas sem correspondência no segundo tornam-se NULL .

EDITAR:

Se você tiver uma lista de tipos que não estão em tbl_pet_types , então você precisa de uma left join com todos os valores em uma tabela 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;