Heim > Datenbank > MySQL-Tutorial > Wie kann ich mehrdeutige Spaltennamen in SQL-Joins auflösen?

Wie kann ich mehrdeutige Spaltennamen in SQL-Joins auflösen?

DDD
Freigeben: 2024-12-31 21:07:15
Original
682 Leute haben es durchsucht

How Can I Resolve Ambiguous Column Names in SQL Joins?

Umgang mit mehrdeutigen Spaltennamen in SQL-Abfragen

Beim Abrufen von Daten aus mehreren Tabellen über Joins wird möglicherweise eine Fehlermeldung angezeigt, die auf eine mehrdeutige Spalte hinweist Name. Dies tritt auf, wenn derselbe Spaltenname in zwei oder mehr der verbundenen Tabellen vorhanden ist, sodass der Abfrageinterpreter unsicher ist, auf welche Tabelle er verweisen soll.

In der bereitgestellten Abfrage enthalten beispielsweise sowohl „InvoiceLineItems“ als auch „Invoices“ eine Spalte mit dem Namen Rechnungs-ID. Beim Abrufen der InvoiceID in der Abfrage ist SQL Server nicht sicher, aus welcher Tabelle die Daten abgerufen werden sollen.

Um diese Mehrdeutigkeit aufzulösen, müssen Sie den Tabellennamen für jede Spalte angeben, auf die Sie verweisen. In diesem Fall können Sie die Abfrage wie folgt aktualisieren:

SELECT 
    VendorName, Invoices.InvoiceID, InvoiceSequence, InvoiceLineItemAmount
FROM Vendors 
JOIN Invoices ON (Vendors.VendorID = Invoices.VendorID)
JOIN InvoiceLineItems ON (Invoices.InvoiceID = InvoiceLineItems.InvoiceID)
WHERE  
    Invoices.InvoiceID IN
        (SELECT InvoiceSequence 
         FROM InvoiceLineItems
         WHERE InvoiceSequence > 1)
ORDER BY 
    VendorName, Invoices.InvoiceID, InvoiceSequence, InvoiceLineItemAmount
Nach dem Login kopieren

Durch die Angabe von Invoices.InvoiceID teilen Sie SQL Server explizit mit, dass Sie den InvoiceID-Wert aus der Invoices-Tabelle abrufen möchten. Dadurch wird die Mehrdeutigkeit beseitigt und die Abfrage kann korrekt ausgeführt werden.

Alternativ können Sie Tabellenaliase verwenden, um jeder Tabelle eine eindeutige Kennung zuzuweisen. Sie könnten beispielsweise Rechnungen als Inv und InvoiceLineItems als ILI aliasen und die Abfrage entsprechend aktualisieren:

SELECT 
    VendorName, Inv.InvoiceID, InvoiceSequence, InvoiceLineItemAmount
FROM Vendors AS V
JOIN Invoices AS Inv ON (V.VendorID = Inv.VendorID)
JOIN InvoiceLineItems AS ILI ON (Inv.InvoiceID = ILI.InvoiceID)
WHERE  
    Inv.InvoiceID IN
        (SELECT InvoiceSequence 
         FROM ILI
         WHERE InvoiceSequence > 1)
ORDER BY 
    VendorName, Inv.InvoiceID, InvoiceSequence, InvoiceLineItemAmount
Nach dem Login kopieren

Die Verwendung von Tabellenaliasen bietet eine weitere Möglichkeit, Mehrdeutigkeiten bei Spaltennamen aufzulösen und sicherzustellen, dass die Abfrage die richtigen Ergebnisse zurückgibt.

Das obige ist der detaillierte Inhalt vonWie kann ich mehrdeutige Spaltennamen in SQL-Joins auflösen?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage