93

我有一个Jobs和一个Companies表,我想提取 20 个满足以下条件的工作:

  1. 仅来自两 (2) 家指定公司的工作
  2. 每个公司最多可以有 10 个工作岗位

我已经尝试了以下SELECTUNION DISTINCT但问题是LIMIT 0,10适用于整个结果集。我希望它适用于每家公司。

如果每个公司没有 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 DISTINCT
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

我是 MySQL 的新手,所以意识到可能有一种更聪明的方法来代替 UNION,所以绝对欢迎任何改进建议。

4

3 回答 3

224

引用文档

要将 ORDER BY 或 LIMIT 应用于单个 SELECT,请将子句放在括 SELECT 的括号内:

(SELECT a FROM t1 WHERE a=10 AND B=1 ORDER BY a LIMIT 10)
UNION
(SELECT a FROM t2 WHERE a=11 AND B=2 ORDER BY a LIMIT 10);
于 2009-09-12T15:30:31.610 回答
1

改进亚历克斯的答案并根据乔的观察,以下应该在 SQLite 中工作:

SELECT * FROM 
(SELECT a FROM t1 WHERE a=10 AND B=1 ORDER BY a LIMIT 10)
UNION
(SELECT a FROM t2 WHERE a=11 AND B=2 ORDER BY a LIMIT 10);
于 2020-12-03T14:22:20.063 回答
0

在 Teradata 中,我们不能将联合与顶级查询一起使用,如果您遇到错误,则需要进行调整,如下所示。为 Teradata 用户添加解决方案。

Union 和 Top 可以一起编写,如下所示在 Teradata

于 2021-06-09T20:06:04.197 回答