sql >> Databáze >  >> RDS >> Mysql

Včetně hodnot NOT FOUND ve výsledcích dotazu MySQL

left join je správné, ale potřebujete types být první:

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

Protože WHERE klauzule odkazuje pouze na tbl_pet_types , to se nemění.

Jak left join funguje jednoduše:Uchovává všechny řádky v prvním stůl. Neodpovídající sloupce ve druhém se stanou NULL .

EDIT:

Pokud máte seznam typů, které nejsou v tbl_pet_types , pak potřebujete left join se všemi hodnotami v odvozené tabulce:

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;


  1. Převod MySQL na Doctrine Query Builder. Problémy s IF a CONCAT. Nebo jiný přístup pro poddotazy na select

  2. Class.forName(com.mysql.jdbc.Driver) nehledá třídu v souboru jar

  3. Volání databázového pohledu v Yii pomocí Active Record

  4. 6 zábavných faktů o společnosti Microsoft, které pravděpodobně neznáte!