Rumah > pangkalan data > tutorial mysql > Adakah JOIN DALAM Mengatasi Kemasukan Nilai NULL OUTER JOIN?

Adakah JOIN DALAM Mengatasi Kemasukan Nilai NULL OUTER JOIN?

DDD
Lepaskan: 2025-01-09 10:36:41
asal
401 orang telah melayarinya

Does an INNER JOIN Override an OUTER JOIN's Inclusion of NULL Values?

Memahami Interaksi INNER dan OUTER JOIN dalam SQL

Pertanyaan SQL yang kompleks kerap menggunakan berbilang operasi JOIN, menggabungkan jenis JOIN yang berbeza. Pertimbangan utama ialah bagaimana kemasukan nilai NULL, ciri OUTER JOIN, dipengaruhi apabila INNER JOIN kemudiannya digunakan.

Bagaimana Inner JOIN Boleh Mempengaruhi Keputusan OUTER JOIN

SERTAI DALAM, dengan sifatnya, hanya mengembalikan baris yang syarat sambung dipenuhi dalam kedua-dua jadual. Jika JOIN DALAM mengikuti OUTER JOIN dan keadaan INNER JOIN bergantung pada lajur yang mungkin NULL (disebabkan oleh OUTER JOIN), ia menapis keluar baris dengan berkesan di mana lajur tersebut adalah NULL. Ini menafikan kemasukan nilai NULL yang diberikan oleh OUTER JOIN pada mulanya.

Contoh Ilustrasi

Mari kita periksa senario:

<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>
Salin selepas log masuk

LEFT JOIN memastikan semua baris daripada jadual person disertakan, walaupun tiada entri yang sepadan dalam address. Walau bagaimanapun, INNER JOIN dengan email kemudian mengehadkan hasil hanya kepada baris yang mempunyai email_id padanan dalam kedua-dua person dan email. Baris daripada person yang mempunyai padanan address tetapi NULL email_id akan dikecualikan.

Senario Bermasalah dan Penyelesaiannya

Pertimbangkan pertanyaan ini:

<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>
Salin selepas log masuk

Di sini, INNER JOIN dengan city menganggap bahawa address.city_id tidak pernah NULL. Jika sesetengah alamat tidak mempunyai city_id, baris tersebut (dan baris person yang berkaitan) akan ditinggalkan, secara tidak sengaja mengubah keputusan LEFT JOIN awal.

Pendekatan yang betul ialah menggunakan LEFT JOIN yang lain dan bukannya INNER JOIN:

<code class="language-sql">SELECT *
FROM person
LEFT JOIN address ON person.address_id = address.id
LEFT JOIN city ON address.city_id = city.id;</code>
Salin selepas log masuk

Ini mengekalkan keterangkuman LEFT JOIN awal, mengendalikan kes dengan betul di mana address.city_id mungkin NULL. Ini memastikan bahawa semua person rekod disertakan, tidak kira sama ada mereka mempunyai alamat atau bandar yang berkaitan dengannya.

Atas ialah kandungan terperinci Adakah JOIN DALAM Mengatasi Kemasukan Nilai NULL OUTER JOIN?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan