Saya punya dua tabel yang ingin saya gabung.
Saya ingin semua kategori di tabel kategori dan juga semua kategori berlangganan oleh pengguna di tabel category_subscription.
pada dasarnya ini adalah permintaan saya sejauh ini:
SELECT *
FROM categories
LEFT JOIN user_category_subscriptions
ON user_category_subscriptions.category_id = categories.category_id
Ini berfungsi dengan baik namun saya ingin menambahkan klausa di mana pada akhir kueri yang kemudian pada dasarnya membuatnya menjadi bagian / equi bergabung.
SELECT *
FROM categories
LEFT JOIN user_category_subscriptions
ON user_category_subscriptions.category_id = categories.category_id
WHERE user_category_subscriptions.user_id = 1
Bagaimana cara saya mendapatkan semua kategori serta semua kategori berlangganan oleh pengguna tertentu hanya menggunakan satu permintaan?
category_id menjadi kunci dalam tabel kategori dan user_category_subscription. user_id berada di tabel user_category_subscription.
Terima kasih
mysql
join
where-clause
mmundiff
sumber
sumber
Jawaban:
Anda harus memasukkannya ke dalam
join
klausa, bukan padawhere
:Lihat, dengan
inner join
, meletakkan klausa di dalamjoin
atau yangwhere
setara. Namun, denganouter join
, mereka sangat berbeda.Sebagai
join
syarat, Anda menentukan rowset yang akan Anda gabungkan ke tabel. Ini berarti bahwa mengevaluasiuser_id = 1
pertama, dan mengambil bagian dariuser_category_subscriptions
denganuser_id
dari1
untuk bergabung ke semua baris dalamcategories
. Ini akan memberi Anda semua baris dicategories
, sementara hanyacategories
yang berlangganan pengguna ini akan memiliki informasi diuser_category_subscriptions
kolom. Tentu saja, semua yang laincategories
akan diisi dengannull
diuser_category_subscriptions
kolom.Sebaliknya,
where
klausa melakukan penggabungan, dan kemudian mengurangi rowset. Jadi, ini melakukan semua gabungan dan kemudian menghilangkan semua baris di manauser_id
tidak sama1
. Anda dibiarkan dengan cara yang tidak efisien untuk mendapatkaninner join
.Semoga ini bisa membantu!
sumber
A
danB
tabel apa? Bisakah Anda ulangi pertanyaan Anda?Coba ini
sumber