left join
正しいですが、types
が必要です 最初に:
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');
WHERE
句はtbl_pet_types
のみを参照します 、変更されません。
left join
の方法 動作は単純です。すべての行を最初のに保持します。 テーブル。 2番目の一致しない列はNULL
になります 。
編集:
tbl_pet_types
にないタイプのリストがある場合 、次にleft join
が必要です 派生テーブルのすべての値を使用:
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;