ホームページ >データベース >mysql チュートリアル >MySQL で UNION を使用するときに会社ごとの結果を効率的に制限するにはどうすればよいですか?

MySQL で UNION を使用するときに会社ごとの結果を効率的に制限するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-14 13:02:51955ブラウズ

How to Efficiently Limit Results Per Company When Using UNION in MySQL?

複数企業の求人検索のための UNION と LIMIT を使用した MySQL クエリの最適化

大規模なデータベースから効率的にデータを取得するには、慎重なクエリの構築が必要です。この例では、複数の企業から求人情報を取得することに重点を置き、結果を 1 企業あたり最大 10 件の求人に制限します。

単一の UNION DISTINCT 句で LIMIT を使用する単純なアプローチでは、企業ごとの結果ではなく、結果の総数が制限されます。 解決策は、ORDER BY クエリの個々の LIMIT ステートメント内で SELECTUNION を適用することです。

<code class="language-sql">(
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')
ORDER BY name, title
LIMIT 0, 10
)
UNION ALL
(
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
);</code>

この改訂されたクエリにより、LIMIT 句が各企業の求人データに対して独立して動作し、企業ごとに最大 10 件の求人が返されるようになります。 明確な結果が明示的に必要でない限り、一般に UNION ALL よりも効率的な UNION DISTINCT の使用に注意してください。 このアプローチは、会社の求人数が 10 未満の場合を処理し、その会社で利用可能なすべての求人を返します。

柔軟性を高め、より複雑なシナリオを実現するには、MySQL の ROW_NUMBER() ウィンドウ関数の活用を検討してください。 ROW_NUMBER() は、定義されたパーティション (この場合は会社ごと) 内の各行に一意のランクを割り当て、高度な結果のフィルタリングとグループ化を可能にします。

以上がMySQL で UNION を使用するときに会社ごとの結果を効率的に制限するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。