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中文網其他相關文章!