Panduan ini menunjukkan cara untuk mendapatkan semula pelajar yang tergolong dalam kelab tertentu menggunakan hubungan has-many-through SQL. Kami akan menganggap tiga jadual: student
, club
dan student_club
(jadual gabungan). Matlamatnya adalah untuk mencari pelajar yang menjadi ahli kedua-dua kelab bola sepak (ID 30) dan kelab besbol (ID 50).
Penyelesaian menggunakan pertanyaan SQL yang ringkas dan cekap:
<code class="language-sql">SELECT DISTINCT s.id, s.name FROM student s JOIN student_club sc ON s.id = sc.student_id WHERE sc.club_id = 30 AND s.id IN (SELECT student_id FROM student_club WHERE club_id = 50);</code>
Pertanyaan ini memanfaatkan subkueri untuk prestasi optimum. Jom pecahkan:
JOIN
Klausa: Jadual student
dan student_club
digabungkan menggunakan student_id
untuk memautkan pelajar dengan keahlian kelab mereka.
WHERE
Klausa: Klausa ini menapis keputusan. Syarat pertama (sc.club_id = 30
) memastikan kami hanya menganggap pelajar dalam kelab bola sepak. Syarat kedua (s.id IN (...)
) menggunakan subquery untuk memperhalusi lagi keputusan, termasuk hanya pelajar yang ID mereka turut terdapat dalam jadual student_club
untuk kelab besbol (club_id = 50).
Pendekatan ini mengelakkan kerumitan yang tidak perlu dan menggunakan indeks pangkalan data dengan cekap (jika tersedia pada lajur student_id
dan club_id
) untuk mendapatkan semula hasil yang diingini dengan cepat, walaupun dengan set data yang luas. Kata kunci DISTINCT
memastikan setiap pelajar disenaraikan sekali sahaja, walaupun mereka mempunyai berbilang entri dalam jadual student_club
.
Atas ialah kandungan terperinci Bagaimana untuk Mencari Pelajar Kepunyaan Pelbagai Kelab Menggunakan Hubungan Has-Many-Through SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!