Combinando operaciones UNION y LIMIT en la consulta MySQL
Pregunta
Tengo una tabla de Trabajos y Empresas , y quiero extraer 20 trabajos que cumplan con los siguientes criterios:
- Trabajos solo de dos (2) empresas nombradas
- Puede haber como máximo 10 empleos por empresa
He intentado lo siguiente SELECT
con UNION DISTINCT
, pero el problema es que el LIMIT 0,10
se aplica a todo el conjunto de resultados . Quiero que se aplique a cada una de las empresas.
Si no hay 10 trabajos por empresa, la consulta debería devolver todos los trabajos que encuentre.
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
Soy nuevo en MySQL, así que tenga en cuenta que puede haber una forma más inteligente de hacer esto en lugar de con UNION, por lo que cualquier sugerencia de mejora es definitivamente bienvenida.
Solución
Citando los documentos ,
Para aplicar ORDER BY o LIMIT a un SELECCIONAR individualmente, colocar la cláusula dentro de los paréntesis que encierran el SELECCIONAR:
(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);