Rumah >pangkalan data >tutorial mysql >Mengapa MySQL Saya Tidak LEFT JOIN Mengembalikan Semua Baris?
Left Join Not Returning All Rows: MySQL Query Issue
Dalam MySQL, operasi LEFT JOIN biasanya digunakan untuk menggabungkan baris daripada dua jadual berdasarkan kunci biasa. Walau bagaimanapun, dalam senario tertentu seperti yang diterangkan dalam soalan ini, pertanyaan mungkin tidak mengembalikan semua baris yang dijangkakan.
Struktur dan Masalah Pertanyaan
Isu timbul apabila WHERE klausa digunakan terus pada syarat cantum, seperti yang dilihat dalam pertanyaan asal:
SELECT pr.*, pr7.value AS `room_price_high` FROM `jos_hp_properties` pr LEFT OUTER JOIN `jos_hp_properties2` pr7 ON pr7.property=pr.id WHERE pr7.field=23
Dalam kes ini, Klausa WHERE mengehadkan gabungan untuk hanya mengembalikan baris dengan pr7.field = 23. Akibatnya, ia mengecualikan sebarang baris dalam jadual jos_hp_properties yang tidak mempunyai entri pr7.field yang sepadan dengan nilai 23. Ini membawa kepada pertanyaan yang mengembalikan lebih sedikit baris daripada yang dijangkakan.
Penyelesaian: Memindahkan WHERE Syarat
Untuk menyelesaikan isu dan memastikan semua baris daripada jadual pertama dikembalikan, syarat WHERE hendaklah dialihkan kepada keadaan ON JOIN, seperti berikut:
SELECT pr.*, pr7.value AS `room_price_high` FROM `jos_hp_properties` pr LEFT JOIN `jos_hp_properties2` pr7 ON pr7.property=pr.id AND pr7.field=23
Dengan mengalihkan syarat ke JOIN, pertanyaan mula-mula menetapkan gabungan kiri antara jadual, dan kemudian menapis baris bercantum berdasarkan kriteria yang ditentukan. Ini memastikan bahawa semua baris daripada jadual jos_hp_properties disertakan dalam set hasil, tidak kira sama ada mereka mempunyai entri yang sepadan dalam jadual jos_hp_properties2 dengan pr7.field = 23.
Atas ialah kandungan terperinci Mengapa MySQL Saya Tidak LEFT JOIN Mengembalikan Semua Baris?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!