MySQL Join with Where Clause
Apabila menyertai dua jadual, anda boleh menapis hasil menggunakan klausa WHERE. Walau bagaimanapun, peletakan klausa ini boleh memberi kesan ketara kepada kecekapan gabungan.
Dalam kes tertentu, matlamatnya adalah untuk mendapatkan semula semua kategori dan kategori yang dilanggan oleh pengguna tertentu. Pertanyaan awal menggunakan LEFT JOIN berfungsi dengan baik, tetapi penambahan klausa WHERE pada ID pengguna nampaknya menukarnya menjadi INNER JOIN.
Untuk menyelesaikan dilema ini, adalah penting untuk memahami perbezaan antara syarat penyertaan dan di mana klausa di luar bercantum. Keadaan gabungan menilai sebelum operasi gabungan dan mentakrifkan baris yang akan dipadankan. Klausa di mana, sebaliknya, beroperasi selepas cantuman dan menapis set baris yang terhasil.
Pendekatan yang betul adalah untuk menentukan penapis dalam keadaan cantuman itu sendiri, seperti yang dilihat di bawah:
SELECT * FROM categories LEFT JOIN user_category_subscriptions ON user_category_subscriptions.category_id = categories.category_id AND user_category_subscriptions.user_id = 1;
Dengan meletakkan penapis dalam klausa HIDUP, hanya baris yang sepadan daripada jadual pengguna_kategori_langganan akan digabungkan ke jadual kategori. Pendekatan ini lebih cekap dan memberikan hasil yang diingini: semua kategori, termasuk yang dilanggan oleh pengguna tertentu.
Atas ialah kandungan terperinci Bagaimanakah Penempatan Klausa WHERE Mempengaruhi Kecekapan MySQL LEFT JOIN?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!