93

JobsテーブルとCompaniesテーブルがあり、次の条件を満たす 20 件の求人を抽出したいと考えています。

  1. 2つの(2)名前の会社からの仕事のみ
  2. 1 社あたり最大 10 のジョブがあります。

SELECTで次のことを試しましたUNION DISTINCTが、問題は が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を使用する代わりにこれを行うよりスマートな方法があるかもしれないことを理解してください。改善のための提案は大歓迎です.

4

3 に答える 3

224

ドキュメントを引用すると、

個々の SELECT に ORDER BY または LIMIT を適用するには、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);
于 2009-09-12T15:30:31.610 に答える
0

Teradata では、トップ クエリでユニオンをそのまま使用することはできません。エラーが発生した場合は、以下に示すように微調整する必要があります。Teradata ユーザー向けのソリューションを追加します。

Union と Top は、Teradata で以下のように一緒に記述できます。

于 2021-06-09T20:06:04.197 に答える