2009-09-12 13 views
44

Mam Jobsa a Firmy tabeli, a chcę, aby wyodrębnić 20 miejsc pracy, które spełniają następujące kryteria:Łącząc Unii oraz operacje LIMIT w zapytaniu MySQL

  1. Praca tylko z dwóch (2) nazwie firmy
  2. Nie może być co najwyżej 10 miejsc pracy na spółkę

próbowałem następujących SELECT z UNION DISTINCT, ale problemem jest to, że t on LIMIT 0,10 dotyczy całego zestawu wyników. Chcę, żeby dotyczyła każdej z firm.

Jeśli w firmie nie ma 10 zadań, zapytanie powinno zwrócić wszystkie znalezione zadania.

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 

Jestem nowym do MySQL, więc sobie sprawę, że może być lepszy sposób to zrobić, zamiast z Unią, więc wszelkie sugestie dotyczące ulepszenia są z pewnością mile widziane.

Odpowiedz

114

Cytowanie the docs,

Aby zastosować ORDER BY lub ograniczyć do indywidualnego SELECT, umieścić klauzulę wewnątrz nawiasów, które otaczają 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

ja jechałem przez dokumentacja MySQL, która powiedziała, że ​​ORDER BY przyszła po UNII ..... i zapomniała o nawiasach! Dzięki –

+0

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

+9

This działa w MySql, ale nie wygląda na to, że SQLite obsługuje to na wypadek, gdyby ktoś wpadł na to pytanie w google –