ホームページ >データベース >mysql チュートリアル >データベーステーブルを結合するときに、各注文の最初の品目のみを効率的に選択するにはどうすればよいですか?

データベーステーブルを結合するときに、各注文の最初の品目のみを効率的に選択するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-17 06:13:09170ブラウズ

How to Efficiently Select Only the First Line Item for Each Order When Joining Database Tables?

データベーステーブル結合: 注文ごとに最初の品目のみを選択

データベース操作では、OrdersLineItems などのテーブルを結合するときに共通の課題が発生します。この場合、1 つの注文に複数の関連付けられた明細が含まれる可能性があります。 これにより、結合された結果セットに冗長なデータが生じることがよくあります。 目標は、注文ごとに 1 つの品目のみを効率的に取得することです。

素朴なアプローチには TOP 1 の使用が含まれる可能性がありますが、サブクエリ内で適切なテーブル参照がないとエラーが発生する可能性があります。

効果的な解決策: CROSS APPLY および JOINORDER BY

これに効果的に対処する 2 つの堅牢な方法:

方法 1: CROSS APPLY

を使用する

このアプローチでは、CROSS APPLY を使用して、Orders テーブルと、各注文の最上位の品目を選択するサブクエリを結合します。

<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>

方法 2: JOINORDER BY

を使用する

このメソッドは JOIN 句を使用します。結合条件では、明細項目を順序付けするサブクエリから LineItemGUID を選択し、各注文の先頭の項目を選択します。

<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
    ORDER BY LineItemGUID
);</code>

どちらの方法でも、注文ごとに 1 つの項目のみが返されることが保証されます。 決定的な結果を得るには、サブクエリ内に ORDER BY 句を含めることが重要です。 ORDER BY を使用して TOP 1 を省略すると、「最初の」行項目がクエリ実行ごとに異なる可能性があるため、予測できない結果が発生します。 ORDER BY を使用すると、選択した順序基準に基づいて特定の広告申込情報が一貫して選択されることが保証されます。

以上がデータベーステーブルを結合するときに、各注文の最初の品目のみを効率的に選択するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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