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