Menggunakan MySQL JOIN dengan WHERE Klausa untuk Mendapatkan Data Berkaitan
Dalam MySQL, menyertai jadual membolehkan anda menggabungkan data daripada berbilang jadual menjadi satu set keputusan. Walau bagaimanapun, menambah klausa WHERE pada cantuman luar, seperti LEFT JOIN, boleh mengubah gelagat cantuman.
Masalah:
Pertimbangkan senario di mana anda mempunyai dua jadual, "kategori" dan "langganan_kategori_pengguna," dan anda mahu mendapatkan semula semua kategori, termasuk yang dilanggan oleh pengguna tertentu dengan "id_pengguna" tertentu. Pertanyaan awal di bawah melaksanakan LEFT JOIN antara dua jadual:
SELECT * FROM categories LEFT JOIN user_category_subscriptions ON user_category_subscriptions.category_id = categories.category_id
Cabaran:
Pada asalnya, matlamatnya adalah untuk melaksanakan gabungan dalaman (atau equi join ) menggunakan klausa WHERE. Walau bagaimanapun, pertanyaan di atas ialah sambung luar, khususnya sambung luar kiri, yang tidak menghalang baris daripada dikembalikan walaupun ia tidak mempunyai nilai yang sepadan dalam jadual "langganan_kategori_pengguna".
Penyelesaian:
Untuk mencapai hasil yang diinginkan, klausa WHERE harus dimasukkan ke dalam pernyataan JOIN itu sendiri, dan bukannya klausa 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
Dalam cantuman kiri, klausa WHERE bertindak sebagai penapis yang digunakan selepas operasi cantum. Dengan memasukkan syarat dalam pernyataan JOIN, anda secara berkesan menyatakan syarat yang mesti dipenuhi untuk baris disertakan dalam keputusan. Ini memastikan bahawa hanya baris yang "id_pengguna" bersamaan dengan 1 akan digabungkan dan dikembalikan.
Atas ialah kandungan terperinci Bagaimanakah Klausa WHERE Mempengaruhi MySQL LEFT JOIN Apabila Mendapatkan Data Berkaitan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!