Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Einschließlich Werten, die NICHT in den MySQL-Abfrageergebnissen gefunden wurden

Ein left join ist richtig, aber Sie brauchen für die types Erster sein:

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

Denn das WHERE -Klausel bezieht sich nur auf tbl_pet_types , es ändert sich nicht.

Wie left join funktioniert ist einfach:Es behält alle Zeilen in der ersten Tisch. Nicht übereinstimmende Spalten in der zweiten werden zu NULL .

BEARBEITEN:

Wenn Sie eine Liste von Typen haben, die nicht in tbl_pet_types enthalten sind , dann brauchen Sie einen left join mit allen Werten in einer abgeleiteten Tabelle:

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;