Anda harus memasukkannya ke dalam join
klausa, bukan 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
Lihat, dengan inner join
, menempatkan klausa di join
atau where
setara. Namun, dengan outer join
, mereka sangat berbeda.
Sebagai join
kondisi, Anda menentukan rowset yang akan Anda gabungkan ke tabel. Ini berarti mengevaluasi user_id = 1
pertama, dan mengambil subset dari user_category_subscriptions
dengan user_id
dari 1
untuk bergabung ke semua baris di categories
. Ini akan memberi Anda semua baris di categories
, sedangkan hanya categories
bahwa pengguna tertentu telah berlangganan akan memiliki informasi apa pun di user_category_subscriptions
kolom. Tentu saja, semua categories
lainnya akan diisi dengan null
di user_category_subscriptions
kolom.
Sebaliknya, sebuah where
klausa bergabung, dan lalu mengurangi baris. Jadi, ini melakukan semua gabungan dan kemudian menghilangkan semua baris di mana user_id
tidak sama dengan 1
. Anda memiliki cara yang tidak efisien untuk mendapatkan inner join
.
Semoga membantu!