ホームページ > データベース > mysql チュートリアル > 複数の明細を含むテーブルを結合するときに重複する注文番号を削除するにはどうすればよいですか?

複数の明細を含むテーブルを結合するときに重複する注文番号を削除するにはどうすればよいですか?

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

How to Eliminate Duplicate Order Numbers When Joining Tables with Multiple Line Items?

複数品目結合での注文番号の重複を避ける

注文ごとに複数の品目を持つテーブルが関与するデータベース結合では、結果に注文番号が重複することがよくあります。 この記事では、一意の注文ごとに 1 つのレコードのみを取得する効率的なソリューションについて説明します。

初期のアプローチとその欠点

簡単なアプローチとしては、「TOP 1」の広告申込情報のみを選択することが考えられます。 ただし、これは、内部の select ステートメント内から外部テーブルに直接アクセスする際の制限により失敗します。

効率的な解決策: クロス適用

CROSS APPLY 演算子は、洗練されたソリューションを提供します。

<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>
ログイン後にコピー

CROSS APPLY は、各注文の最初の品目を効率的に取得し、注文番号の重複を防ぎます。

古い SQL Server バージョンの代替: INNER JOIN

2005 より前の SQL Server バージョンの場合、INNER JOIN は同等のソリューションを提供します。

<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 句を含めてください。

以上が複数の明細を含むテーブルを結合するときに重複する注文番号を削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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