首頁 >資料庫 >mysql教程 >使用 MySQL 的 UNION 運算子時如何限制每個表的結果?

使用 MySQL 的 UNION 運算子時如何限制每個表的結果?

Susan Sarandon
Susan Sarandon原創
2025-01-14 12:57:44275瀏覽

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

MySQL 中結合使用 UNION 和 LIMIT 運算子

使用 UNION 運算子從多個資料表查詢資料時,可能需要分別對每個結果集套用 LIMIT 運算子。這可以透過將 LIMIT 放在包含各個 SELECT 語句的括號內來實現。

以下範例旨在從兩家特定公司中提取 20 個職位,每家公司限制為 10 個職位:

錯誤的範例:

<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作用於UNION後的結果集,而非單一SELECT語句。

正確的範例:

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

透過將每個 SELECT 語句都用括號括起來並分別應用 LIMIT 10,我們有效地將結果限制為每家公司的前 10 個職位。如果任一家公司職位少於 10 個,查詢仍將傳回所有可用結果。

這種方法符合文件的指導,即「要將 ORDER BY 或 LIMIT 應用於單一 SELECT,請將子句放在包含 SELECT 的括號內」。 需要注意的是,這種方法只對每個子查詢進行排序和限制,最終結果的排序則需要另外處理。 如果需要將最終合併後的結果排序,則需要在最外層再增加一個ORDER BY語句。

以上是使用 MySQL 的 UNION 運算子時如何限制每個表的結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn