Heim >Datenbank >MySQL-Tutorial >Wie beschränke ich SQL-Joins nur auf die erste Zeile einer verwandten Tabelle?
SQL-Joins auf die erste zugehörige Zeile beschränken
Das effiziente Zusammenführen mehrerer Tabellen in SQL ist von entscheidender Bedeutung, aber manchmal benötigen wir nur die erste Zeile einer verwandten Tabelle. In diesem Artikel wird gezeigt, wie Sie einen Join auf eine einzelne Zeile beschränken und doppelte Zeilen vermeiden, wenn Sie mit Eins-zu-vielen-Beziehungen arbeiten.
Lassen Sie uns ein häufiges Szenario untersuchen:
Wir haben zwei Tische, Orders
und LineItems
. Während die meisten Bestellungen eine Werbebuchung haben, können einige mehrere haben. Ein Standard-INNER JOIN
würde zu doppelten Bestellzeilen führen, wenn mehrere Einzelposten vorhanden wären.
Um dies zu verhindern, beschränken wir die Verknüpfung nur auf die erste LineItems
Zeile pro Bestellung. Hier sind zwei effektive Methoden:
Verwenden von CROSS APPLY (SQL Server 2005 und höher):
Dieser Ansatz bietet eine sauberere, besser lesbare 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>
Verwendung eines Inner Join mit einer Unterabfrage (SQL Server vor 2005):
Für ältere SQL Server-Versionen erzielt diese Methode das gleiche Ergebnis:
<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>
Wichtige Überlegung: TOP 1
ohne ORDER BY
führt zu nicht deterministischen Ergebnissen. Um konsistent eine bestimmte Zeile auszuwählen, fügen Sie immer eine ORDER BY
-Klausel in die innere Abfrage ein, um die gewünschten Sortierkriterien anzugeben.
Das obige ist der detaillierte Inhalt vonWie beschränke ich SQL-Joins nur auf die erste Zeile einer verwandten Tabelle?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!