Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menapis Pelajar Yang Kepunyaan Pelbagai Kelab dengan Cekap dalam Hubungan Telah Banyak Melalui?
Menapis Keputusan SQL dalam Hubungan Has-Many-Through: Panduan Praktikal
Menyoal data dengan cekap merentas jadual dengan perhubungan has-many-through adalah penting untuk prestasi pangkalan data. Mari kita ilustrasikan dengan senario biasa yang melibatkan tiga jadual:
student
(id, nama)club
(id, nama)student_club
(id_pelajar, id_kelab)Cabaran: Kenal pasti pelajar yang menjadi ahli kedua-dua kelab bola sepak (club_id 30) dan besbol (club_id 50).
Mengapa JOIN Mudah Gagal:
Pendekatan naif menggunakan cantuman adalah tidak berkesan:
<code class="language-sql">SELECT student.* FROM student INNER JOIN student_club sc ON student.id = sc.student_id LEFT JOIN club c ON c.id = sc.club_id WHERE c.id = 30 AND c.id = 50;</code>
Ini gagal kerana satu rekod club
tidak boleh mempunyai id = 30
dan id = 50
secara serentak.
Penyelesaian Berkesan:
1. Bersarang IN
Pertanyaan:
Pendekatan ini menggunakan dua subkueri untuk mencari pelajar dalam setiap kelab dan kemudian memotong keputusan:
<code class="language-sql">SELECT student.* FROM student WHERE student.id IN ( SELECT student_id FROM student_club WHERE club_id = 30 ) AND student.id IN ( SELECT student_id FROM student_club WHERE club_id = 50 );</code>
Kaedah ini secara amnya cekap, walaupun dengan set data yang besar.
2. Menggunakan INTERSECT
:
Pengendali INTERSECT
menyediakan penyelesaian yang lebih ringkas:
<code class="language-sql">SELECT student.* FROM student WHERE student.id IN ( SELECT student_id FROM student_club WHERE club_id = 30 ) INTERSECT SELECT student.id FROM student WHERE student.id IN ( SELECT student_id FROM student_club WHERE club_id = 50 );</code>
INTERSECT
hanya mengembalikan ID pelajar biasa daripada kedua-dua subkueri, dengan berkesan mengenal pasti pelajar dalam kedua-dua kelab. Pilihan antara ini dan pendekatan IN
bersarang selalunya bergantung pada keutamaan sistem pangkalan data dan tingkah laku pengoptimum pertanyaan. Kedua-duanya secara amnya cekap untuk tugasan ini.
Atas ialah kandungan terperinci Bagaimana untuk Menapis Pelajar Yang Kepunyaan Pelbagai Kelab dengan Cekap dalam Hubungan Telah Banyak Melalui?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!