首页 >数据库 >mysql教程 >在 MySQL 中使用 UNION 时如何有效限制每个公司的结果?

在 MySQL 中使用 UNION 时如何有效限制每个公司的结果?

Patricia Arquette
Patricia Arquette原创
2025-01-14 13:02:51952浏览

How to Efficiently Limit Results Per Company When Using UNION in MySQL?

使用 UNION 和 LIMIT 优化 MySQL 查询以进行多公司职位搜索

从大型数据库中高效地检索数据需要仔细的查询构造。此示例重点关注从多个公司获取职位列表,将结果限制为每个公司最多 10 个职位。

使用 UNION DISTINCT 和单个 LIMIT 子句的简单方法将限制结果总数,而不是每个公司的结果。 解决方案在于在 ORDER BY 查询的每个单独的 LIMIT 语句中应用 SELECTUNION

<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')
ORDER BY name, title
LIMIT 0, 10
)
UNION ALL
(
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 0, 10
);</code>

此修改后的查询可确保 LIMIT 子句对每个公司的职位数据独立运行,每个公司最多返回 10 个职位。 请注意 UNION ALL 的使用,它通常比 UNION DISTINCT 更有效,除非明确需要不同的结果。 此方法处理公司职位少于 10 个的情况,返回该公司的所有可用职位。

为了增强灵活性和更复杂的场景,请考虑利用 MySQL 的 ROW_NUMBER() 窗口函数。 ROW_NUMBER() 为定义的分区(在本例中为每个公司)内的每一行分配唯一的排名,从而实现复杂的结果过滤和分组。

以上是在 MySQL 中使用 UNION 时如何有效限制每个公司的结果?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn