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

Inkluderer værdier IKKE FUNDET i MySQL-forespørgselsresultater

En left join er korrekt, men du skal bruge types at være først:

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

Fordi WHERE klausul refererer kun til tbl_pet_types , det ændrer sig ikke.

Hvordan left join fungerer er enkelt:Det holder alle rækker i den første bord. Umatchede kolonner i den anden bliver NULL .

EDIT:

Hvis du har en liste over typer, der ikke er i tbl_pet_types , så skal du bruge en left join med alle værdierne i en afledt tabel:

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. Kroatiske diakritiske tegn i MySQL db (utf-8)

  2. Laravel-tidsstempler for at vise millisekunder

  3. SQL Server ventehændelser -1

  4. Er der en måde at cache en visning på, så forespørgsler mod den er hurtige?