ホームページ > データベース > mysql チュートリアル > SQL 結合を関連テーブルの最初の行のみに制限するにはどうすればよいですか?

SQL 結合を関連テーブルの最初の行のみに制限するにはどうすればよいですか?

Linda Hamilton
リリース: 2025-01-17 06:08:09
オリジナル
826 人が閲覧しました

How to Limit SQL Joins to Only the First Row of a Related Table?

SQL 結合を最初の関連行に制限する

SQL で複数のテーブルを効率的に結合することは非常に重要ですが、場合によっては、関連テーブルの最初の行だけが必要な場合もあります。この記事では、1 対多のリレーションシップを扱うときに結合を 1 つの行に制限し、重複する行を回避する方法を説明します。

一般的なシナリオを調べてみましょう:

OrdersLineItems という 2 つのテーブルがあります。 ほとんどの注文には 1 つの品目がありますが、一部の注文には複数の品目がある場合があります。 複数の明細項目が存在する場合、標準の INNER JOIN では注文行が重複します。

これを防ぐために、結合を注文ごとに最初の LineItems 行のみに制限します。 ここでは 2 つの効果的な方法を紹介します:

CROSS APPLY の使用 (SQL Server 2005 以降):

このアプローチは、よりクリーンで読みやすいソリューションを提供します。

<code class="language-sql">SELECT  Orders.OrderNumber, LineItems2.Quantity, LineItems2.Description
FROM    Orders
CROSS APPLY
        (
        SELECT  TOP 1 LineItems.Quantity, LineItems.Description
        FROM    LineItems
        WHERE   LineItems.OrderID = Orders.OrderID
        ) LineItems2</code>
ログイン後にコピー

サブクエリによる内部結合の使用 (SQL Server 2005 以前):

古い SQL Server バージョンの場合、この方法でも同じ結果が得られます。

<code class="language-sql">SELECT   Orders.OrderNumber, LineItems.Quantity, LineItems.Description
FROM     Orders
JOIN     LineItems
ON       LineItems.LineItemGUID =
         (
         SELECT  TOP 1 LineItemGUID 
         FROM    LineItems
         WHERE   OrderID = Orders.OrderID
         )</code>
ログイン後にコピー

重要な考慮事項: を使用しない TOP 1 ORDER BY は、非決定的な結果を生成します。特定の行を一貫して選択するには、内部クエリに常に ORDER BY 句を含めて、必要な並べ替え基準を指定します。

以上がSQL 結合を関連テーブルの最初の行のみに制限するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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