Heim > Datenbank > MySQL-Tutorial > Wie beschränke ich SQL-Joins nur auf die erste Zeile einer verwandten Tabelle?

Wie beschränke ich SQL-Joins nur auf die erste Zeile einer verwandten Tabelle?

Linda Hamilton
Freigeben: 2025-01-17 06:08:09
Original
828 Leute haben es durchsucht

How to Limit SQL Joins to Only the First Row of a Related Table?

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage