在MySQL查询中结合UNION和LIMIT操作

6tqwzwtp  于 2023-05-16  发布在  Mysql
关注(0)|答案(3)|浏览(238)

我有一个Jobs和一个Companies表,我想提取20个满足以下条件的职务:
1.仅来自两家(2)指定公司的职位
1.每家公司最多只能有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,所以任何改进的建议都是绝对受欢迎的。

xxls0lw8

xxls0lw81#

引用the docs
要将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);
xxslljrj

xxslljrj2#

改进Alex的答案并基于Joe的观察,以下内容应该在SQLite中工作:

SELECT * FROM 
(SELECT a FROM t1 WHERE a=10 AND B=1 ORDER BY a LIMIT 10)
UNION
SELECT * FROM 
(SELECT a FROM t2 WHERE a=11 AND B=2 ORDER BY a LIMIT 10);
t9aqgxwy

t9aqgxwy3#

在Teradata中,我们不能使用union与top查询,如果你这样做,你会得到一个错误,需要调整如下所示。为Teradata用户添加解决方案。

相关问题