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

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

Susan Sarandon
發布: 2025-01-14 12:57:44
原創
328 人瀏覽過

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

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

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

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

錯誤的範例:

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;
登入後複製

上述程式碼的LIMIT 20作用於UNION後的結果集,而非單一SELECT語句。

正確的範例:

(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);
登入後複製

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

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

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

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板