首页 >数据库 >mysql教程 >使用 MySQL 的 UNION 运算符时如何限制每个表的结果?

使用 MySQL 的 UNION 运算符时如何限制每个表的结果?

Susan Sarandon
Susan Sarandon原创
2025-01-14 12:57:44237浏览

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