Heim >Datenbank >MySQL-Tutorial >Wie eliminiert man doppelte Bestellnummern beim Zusammenführen von Tabellen mit mehreren Einzelposten?

Wie eliminiert man doppelte Bestellnummern beim Zusammenführen von Tabellen mit mehreren Einzelposten?

Linda Hamilton
Linda HamiltonOriginal
2025-01-17 06:21:09159Durchsuche

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

Vermeidung doppelter Bestellnummern in mehrzeiligen Artikelverknüpfungen

Datenbankverknüpfungen mit Tabellen mit mehreren Einzelposten pro Bestellung führen oft zu doppelten Bestellnummern in den Ergebnissen. In diesem Artikel werden effiziente Lösungen untersucht, um nur einen Datensatz pro eindeutiger Bestellung abzurufen.

Erstansatz und seine Mängel

Ein einfacher Ansatz könnte darin bestehen, nur die Werbebuchung „TOP 1“ auszuwählen. Dies schlägt jedoch aufgrund von Einschränkungen beim direkten Zugriff auf die äußere Tabelle aus der inneren Select-Anweisung fehl.

Effiziente Lösung: CROSS APPLY

Der CROSS APPLY-Operator bietet eine elegante Lösung:

<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 ruft effizient die erste Position für jede Bestellung ab und verhindert so doppelte Bestellnummern.

Alternative für ältere SQL Server-Versionen: INNER JOIN

Für SQL Server-Versionen vor 2005 bietet ein INNER JOIN eine vergleichbare Lösung:

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

Sicherstellung deterministischer Ergebnisse

Entscheidend ist, dass TOP 1 ohne eine ORDER BY-Klausel nicht deterministisch ist. Das ausgewählte Einzelelement kann zwischen Abfrageausführungen variieren, auch wenn die Daten unverändert bleiben. Fügen Sie immer eine ORDER BY-Klausel in die innere Abfrage ein, um konsistente Ergebnisse zu gewährleisten.

Das obige ist der detaillierte Inhalt vonWie eliminiert man doppelte Bestellnummern beim Zusammenführen von Tabellen mit mehreren Einzelposten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn