Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengehadkan Keputusan Setiap Jadual Apabila Menggunakan Operator UNION MySQL?

Bagaimana untuk Mengehadkan Keputusan Setiap Jadual Apabila Menggunakan Operator UNION MySQL?

Susan Sarandon
Susan Sarandonasal
2025-01-14 12:57:44241semak imbas

How to Limit Results Per Table When Using MySQL's UNION Operator?

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!

Kenyataan:
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