Объединение операций UNION и LIMIT в запросе MySQL
У меня есть таблица Вакансии и Компании, и я хочу извлечь 20 заданий, которые отвечают следующим критериям:
- Работа только от двух (2) названных компаний.
- В компании может быть не более 10 рабочих мест.
Я пробовал следующий SELECT
с UNION 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, поэтому любые предложения по улучшению, безусловно, приветствуются.
Ответы
Ответ 1
Цитата документы,
Чтобы применить 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);