Tapis baris yang sepadan dengan semua item dalam senarai
Andaikan anda mempunyai dua jadual, "kereta" dan "ujian lulus", dan anda memerlukan cara untuk mengenal pasti kereta yang telah lulus set ujian tertentu. Jadual "paling lulus" merekodkan ujian yang diluluskan oleh setiap kenderaan.
Satu cara untuk mencapai matlamat ini adalah dengan menggunakan pernyataan IN. Walau bagaimanapun, kaedah ini mungkin tidak memberikan hasil yang diingini kerana ia mengembalikan kereta yang walaupun lulus salah satu ujian dalam senarai yang ditentukan. Untuk memadankan semua nilai dalam senarai dalam semua baris penyelesaian lain diperlukan.
Pertanyaan SQL berikut menggunakan klausa GROUP BY dan HAVING untuk menyelesaikan tugas ini:
<code class="language-sql">SELECT carname FROM PassedTest GROUP BY carname HAVING COUNT(DISTINCT testtype) = 4</code>
Pertanyaan ini mula-mula mengumpulkan baris dalam jadual "paling lulus" mengikut lajur "carname". Ia kemudian menggunakan fungsi COUNT(DISTINCT) untuk mengira kiraan nilai "jenis ujian" yang berbeza bagi setiap kenderaan. Klausa HAVING digunakan untuk menapis keputusan untuk memilih hanya kereta dengan kiraan jenis ujian berbeza bersamaan dengan 4 (dengan andaian terdapat empat ujian dalam senarai).
Anda juga boleh menggunakan hasil pertanyaan ini sebagai pernyataan bersarang untuk mengekstrak maklumat tambahan daripada jadual "kereta":
<code class="language-sql">SELECT * FROM cars WHERE carname IN ( SELECT carname FROM PassedTest GROUP BY carname HAVING COUNT(DISTINCT testtype) = 4 )</code>
Pertanyaan lanjutan ini akan mendapatkan semula semua data yang berkaitan daripada jadual "kereta" untuk kenderaan yang memenuhi kriteria yang ditetapkan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memilih Kereta Yang Lulus Semua Ujian dalam Senarai Menggunakan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!