Một left join
là đúng, nhưng bạn cần types
là người đầu tiên:
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');
Bởi vì WHERE
mệnh đề chỉ đề cập đến tbl_pet_types
, nó không thay đổi.
Cách left join
hoạt động rất đơn giản:Nó giữ tất cả các hàng ở đầu tiên bàn. Các cột không khớp trong cột thứ hai trở thành NULL
.
CHỈNH SỬA:
Nếu bạn có danh sách các loại không có trong tbl_pet_types
, thì bạn cần một left join
với tất cả các giá trị trong bảng dẫn xuất:
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;