Mysql
 sql >> Database >  >> RDS >> Mysql

Compresi i valori NON TROVATI nei risultati delle query MySQL

Un left join è corretto, ma è necessario per i types essere il primo:

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

Perché il WHERE la clausola si riferisce solo a tbl_pet_types , non cambia.

Come left join funziona è semplice:mantiene tutte le righe nella prima tavolo. Le colonne non corrispondenti nel secondo diventano NULL .

MODIFICA:

Se hai un elenco di tipi che non sono in tbl_pet_types , allora hai bisogno di un left join con tutti i valori in una tabella derivata:

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;