Tôi có các bảng users
, locations
và bảng tham gia. Bảng kết nối cũng có một giá trị xếp hạng cho mỗi cá nhân tại vị trí đó, bởi vì những cá nhân đó có thứ hạng cao hơn tại các vị trí nhất định hơn tại các vị trí khác.Loại Tham gia nào để xem các giá trị không tồn tại trong bảng Tham gia?
users
=========
id | name
=========
1 | john
2 | bob
3 | alex
locations
===============
id | name
===============
1 | san diego
2 | dallas
3 | new york
4 | denver
join_users_locations
==============================
user_id | location_id | rank
==============================
2 | 1 | 4
2 | 2 | 3
2 | 4 | 2
3 | 1 | 2
3 | 2 | 4
Bạn có thể thấy rằng trong bảng tham gia, người dùng chỉ được liệt kê nếu họ có xếp hạng tại vị trí đó. Họ không phải là ngay cả trong bảng nếu thứ hạng của họ là số không/null.
Tôi muốn để có được kết quả truy vấn như thế này:
name | location | rank
=======================
bob | san diego | 4
bob | dallas | 3
bob | new york | 0
bob | denver | 2
Như bạn thấy, tôi muốn tất cả các địa điểm để có trong danh sách, thậm chí những người mà người dùng không tham gia với (chỉ cần cung cấp cho các trường đó có giá trị xếp hạng là 0).
Thật dễ dàng để có được danh sách các địa điểm và đứng thứ cho các địa điểm anh/cô ấy được nối với:
SELECT
u.name,
FROM users u
LEFT JOIN join_users_locations jul ON jul.user_id = u.id
LEFT JOIN locations l ON l.id = jul.location_id
WHERE u.id = 2
Nhưng đó chỉ liệt kê những gì các địa điểm người dùng sẽ được tham gia với. Tôi cũng muốn xem các vị trí không tham gia.
Tôi biết điều này là có thể, nhưng tôi không chắc chắn giải pháp là gì. Tôi đã thử một số loại JOIN khác nhau với các kết quả khác nhau.
Cậu cố gắng rời bên ngoài tham gia? – Ciprian