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中文网其他相关文章!