Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengehadkan Keputusan Setiap Jadual Apabila Menggunakan Operator UNION MySQL?
Penggunaan gabungan pengendali UNION dan LIMIT dalam MySQL
Apabila menanyakan data daripada berbilang jadual menggunakan operator UNION, anda mungkin perlu menggunakan operator LIMIT pada setiap set hasil secara berasingan. Ini dicapai dengan meletakkan LIMIT dalam kurungan yang mengelilingi setiap pernyataan SELECT.
Contoh berikut direka bentuk untuk mengeluarkan 20 pekerjaan daripada dua syarikat tertentu, dengan had 10 pekerjaan bagi setiap syarikat:
Contoh salah:
<code class="language-sql">SELECT c.name, j.title, j.`desc`, j.link FROM jobs_job j INNER JOIN companies_company c ON j.company_id = c.id WHERE c.name IN ('Company1') UNION SELECT c.name, j.title, j.`desc`, j.link FROM jobs_job j INNER JOIN companies_company c ON j.company_id = c.id WHERE c.name IN ('Company2') ORDER BY name, title LIMIT 20;</code>
LIMIT 20 kod di atas bertindak pada keputusan yang ditetapkan selepas UNION, bukan satu pernyataan SELECT.
Contoh yang betul:
<code class="language-sql">(SELECT c.name, j.title, j.`desc`, j.link FROM jobs_job j INNER JOIN companies_company c ON j.company_id = c.id WHERE c.name = 'Company1' ORDER BY name, title LIMIT 10) UNION (SELECT c.name, j.title, j.`desc`, j.link FROM jobs_job j INNER JOIN companies_company c ON j.company_id = c.id WHERE c.name = 'Company2' ORDER BY name, title LIMIT 10);</code>
Dengan mengehadkan setiap penyata SELECT dengan kurungan dan menggunakan LIMIT 10 secara individu, kami mengehadkan keputusan dengan berkesan kepada 10 jawatan teratas di setiap syarikat. Jika mana-mana syarikat mempunyai kurang daripada 10 jawatan, pertanyaan itu masih akan mengembalikan semua hasil yang tersedia.
Pendekatan ini mengikut panduan dokumentasi bahawa "Untuk menggunakan ORDER BY atau LIMIT pada satu SELECT, letakkan klausa dalam kurungan yang mengelilingi SELECT". Perlu diingatkan bahawa kaedah ini hanya mengisih dan mengehadkan setiap subkueri, dan pengisihan hasil akhir memerlukan pemprosesan tambahan. Jika anda perlu mengisih hasil gabungan terakhir, anda perlu menambah satu lagi penyata ORDER BY di peringkat paling luar.
Atas ialah kandungan terperinci Bagaimana untuk Mengehadkan Keputusan Setiap Jadual Apabila Menggunakan Operator UNION MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!