2009-09-12 13 views
44

Tengo un Empleo y un tabla Empresas, y quiero extraer 20 empleos que cumplen los siguientes criterios:Combinando las operaciones límite de la Unión y en consulta MySQL

  1. Empleo sólo de dos (2) compañías nombradas
  2. No puede ser como máximo de 10 puestos de trabajo por empresa

he intentado el siguiente SELECT con UNION DISTINCT, pero el problema es que t él LIMIT 0,10 se aplica a todo el conjunto de resultados. Quiero que se aplique a cada una de las compañías.

Si no hay 10 trabajos por empresa, la consulta debe 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, por lo que se dan cuenta de que puede haber una manera más inteligente de hacer esto en lugar de con UNION, por lo que cualquier sugerencia de mejora son definitivamente la bienvenida.

Respuesta

114

Citando the docs,

Para aplicar ORDER BY o LIMIT a un Elección de la persona, colocar la cláusula dentro de los paréntesis que encierran 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); 
+0

que iba por la documentación de MySQL que decía que ORDEN POR vino después de la UNIÓN ..... ¡y se olvidó de los paréntesis! Gracias –

+0

@Mauro, che ne dici di accettare la risposta, se ti risolve il problema, eh?! -) Usa il segno di "checkmark" sotto il numero di upvotes (attualmente tre ...) ... –

+9

Este funciona en MySql, pero no parece que SQLite admita esto en caso de que alguien se encuentre con esta pregunta en google –

Cuestiones relacionadas