Serbang SQL Joins: INNER JOIN dan OUTER JOINs
Adakah INNER JOIN
mengikuti OUTER JOIN
membatalkan kesan OUTER JOIN
? Dan patutkah INNER JOIN
selalu mendahului OUTER JOIN
dalam pertanyaan berbilang penyertaan?
Jawapannya bernuansa. INNER JOIN
berikutnya hanya akan menafikan OUTER JOIN
jika klausa ON
nya memerlukan kehadiran lajur yang boleh menjadi NULL
disebabkan oleh OUTER JOIN
. Hanya menyusun semula cantuman tidak akan menyelesaikannya; anda perlu menukar INNER JOIN
kepada OUTER JOIN
yang sesuai.
Mari kita gambarkan:
Contoh 1 (Susun Semula Tidak Penting):
<code class="language-sql">SELECT * FROM person LEFT JOIN address ON person.address_id = address.id INNER JOIN email ON person.email_id = email.id</code>
Di sini, menyusun semula gabungan tidak akan mengubah keputusan.
Contoh 2 (Perkara Susunan Semula):
<code class="language-sql">SELECT * FROM person LEFT JOIN address ON person.address_id = address.id INNER JOIN city ON address.city_id = city.id</code>
Klausa ON
kedua memerlukan bukan-NULL
address.city_id
. Ini mengalahkan LEFT OUTER JOIN
, menapis person
rekod tanpa padanan city
melalui address
. Untuk membetulkan ini, gantikan INNER JOIN
dengan LEFT OUTER JOIN
.
Amalan Terbaik:
Walaupun tidak wajib, secara amnya disyorkan untuk meletakkan INNER JOIN
s sebelum OUTER JOIN
s. Ini meningkatkan kebolehbacaan dan menjelaskan syarat penapisan penting pertanyaan. Tambahan pula, RIGHT OUTER JOIN
s selalunya kurang diutamakan dan biasanya boleh ditulis semula menggunakan LEFT OUTER JOIN
s untuk kejelasan dan kebolehselenggaraan yang lebih baik.
Atas ialah kandungan terperinci Adakah JOIN DALAM Selepas OUTER JOIN Meniadakan Kesan OUTER JOIN?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!