1. ホーム
  2. mysql

[解決済み] MySQLクエリでUNIONとLIMIT操作を組み合わせる

2023-02-22 11:23:49

質問

私は ジョブ 企業 テーブルがあり、次の条件を満たす20の仕事を抽出したいと思います。

  1. 2 つの指定された会社からの求人情報のみ
  2. 1 社あたり最大 10 件のジョブがあります

以下のように試してみました。 SELECTUNION DISTINCT が、問題なのは LIMIT 0,10 が結果セット全体に適用されることです。私はそれが各企業に適用されるようにしたいです。

1社につき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);