ホームページ >データベース >mysql チュートリアル >データベーステーブルを結合するときに、各注文の最初の品目のみを効率的に選択するにはどうすればよいですか?
データベーステーブル結合: 注文ごとに最初の品目のみを選択
データベース操作では、Orders
や LineItems
などのテーブルを結合するときに共通の課題が発生します。この場合、1 つの注文に複数の関連付けられた明細が含まれる可能性があります。 これにより、結合された結果セットに冗長なデータが生じることがよくあります。 目標は、注文ごとに 1 つの品目のみを効率的に取得することです。
素朴なアプローチには TOP 1
の使用が含まれる可能性がありますが、サブクエリ内で適切なテーブル参照がないとエラーが発生する可能性があります。
効果的な解決策: CROSS APPLY
および JOIN
と ORDER 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: JOIN
と ORDER 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 サイトの他の関連記事を参照してください。