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

MySQL の UNION 演算子を使用するときにテーブルごとの結果を制限するにはどうすればよいですか?

Susan Sarandon
リリース: 2025-01-14 12:57:44
オリジナル
245 人が閲覧しました

How to Limit Results Per Table When Using MySQL's UNION Operator?

MySQL での UNION 演算子と LIMIT 演算子の併用

UNION 演算子を使用して複数のテーブルのデータをクエリする場合、LIMIT 演算子を各結果セットに個別に適用する必要がある場合があります。これは、各 SELECT ステートメントを囲む括弧内に LIMIT を配置することで実現されます。

次の例は、2 つの特定の企業から 20 の求人を抽出するように設計されており、1 社あたりの求人数は 10 件に制限されています。

間違った例:

<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')
UNION
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 20;</code>
ログイン後にコピー

上記のコードの LIMIT 20 は、単一の SELECT ステートメントではなく、UNION 後の結果セットに作用します。

正しい例:

<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 = 'Company1'
ORDER BY name, title
LIMIT 10)
UNION
(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 = 'Company2'
ORDER BY name, title
LIMIT 10);</code>
ログイン後にコピー

各 SELECT ステートメントを括弧で囲み、LIMIT 10 を個別に適用することで、結果を各企業の上位 10 位に効果的に制限します。企業のポジションが 10 件未満の場合でも、クエリは利用可能なすべての結果を返します。

このアプローチは、「単一の SELECT に ORDER BY または LIMIT を適用するには、SELECT を囲む括弧内に句を配置する」というドキュメントのガイダンスに従っています。 この方法は各サブクエリを並べ替えて制限するだけであり、最終結果の並べ替えには追加の処理が必要であることに注意してください。 最終的なマージ結果を並べ替える必要がある場合は、最外部レベルに別の ORDER BY ステートメントを追加する必要があります。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート