MySQLクエリでUNION操作とLIMIT操作を組み合わせる
質問
Jobs テーブルと Companies テーブルがあり、次の条件を満たす20個のジョブを抽出したい:
- 指定された2つの会社からの求人のみ
- 会社ごとに最大10人の仕事があります
UNION DISTINCT
で次の SELECT
を試しましたが、問題は 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を使用する代わりにこれを行う賢い方法があるかもしれないことを理解してください。
解決
引用ドキュメント、
に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);
所属していません StackOverflow