Bạn cần đặt nó vào join
mệnh đề, không phải where
:
SELECT *
FROM categories
LEFT JOIN user_category_subscriptions ON
user_category_subscriptions.category_id = categories.category_id
and user_category_subscriptions.user_id =1
Hãy xem, với một inner join
, đặt một mệnh đề trong join
hoặc where
là tương đương. Tuy nhiên, với outer join
, chúng rất khác nhau.
Với tư cách là một join
điều kiện, bạn chỉ định tập hợp hàng mà bạn sẽ tham gia vào bảng. Điều này có nghĩa là nó đánh giá user_id = 1
đầu tiên và lấy tập hợp con của user_category_subscriptions
với một user_id
trong tổng số 1
để tham gia vào tất cả các hàng trong categories
. Điều này sẽ cung cấp cho bạn tất cả các hàng trong categories
, trong khi chỉ các categories
mà người dùng cụ thể này đã đăng ký sẽ có bất kỳ thông tin nào trong user_category_subscriptions
cột. Tất nhiên, tất cả các categories
khác sẽ được điền bằng null
trong user_category_subscriptions
cột.
Ngược lại, where
mệnh đề tham gia và sau đó làm giảm tập hợp hàng. Vì vậy, điều này thực hiện tất cả các phép nối và sau đó loại bỏ tất cả các hàng mà user_id
không bằng 1
. Bạn còn lại một cách không hiệu quả để có được inner join
.
Hy vọng rằng điều này sẽ hữu ích!