Heim >Datenbank >MySQL-Tutorial >Wie kann der SQL-Fehler wegen mehrdeutiger Spaltennamen in Joins behoben werden?
Fehler bei mehrdeutigen SQL-Spaltennamen: Eine ausführliche Erklärung
Beim Arbeiten mit SQL-Abfragen, bei denen Tabellen verknüpft werden, kann ein Fehler auftreten in den verbundenen Tabellen mehrere Spalten mit demselben Namen haben. Dieser Fehler tritt auf, weil die Datenbank nicht ermitteln kann, zu welcher Tabelle der Spaltenverweis gehört. In diesem Artikel werden wir uns mit diesem Problem befassen und eine Lösung anbieten.
Betrachten Sie die folgende Abfrage:
SELECT VendorName, 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, InvoiceID, InvoiceSequence, InvoiceLineItemAmount
Bei dieser Abfrage tritt der Fehler aufgrund des Vorhandenseins der „InvoiceID“ auf "-Spalte in den Tabellen „Invoices“ und „InvoiceLineItems“. Die Datenbank kann nicht erkennen, aus welcher Tabelle Sie den „InvoiceID“-Wert abrufen möchten.
Um diese Mehrdeutigkeit aufzulösen, müssen Sie beim Verweis auf die Spalte den Tabellennamen angeben. Sie können dies entweder durch Punktnotation oder durch Aliase erreichen. Bei der Punktnotation wird dem Spaltennamen wie folgt der Tabellenname vorangestellt:
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
Alternativ können Sie Aliase wie folgt verwenden:
SELECT v.VendorName, i.InvoiceID, il.InvoiceSequence, il.InvoiceLineItemAmount FROM Vendors AS v JOIN Invoices AS i ON (v.VendorID = i.VendorID) JOIN InvoiceLineItems AS il ON (i.InvoiceID = il.InvoiceID) WHERE i.InvoiceID IN (SELECT InvoiceSequence FROM InvoiceLineItems WHERE InvoiceSequence > 1) ORDER BY v.VendorName, i.InvoiceID, il.InvoiceSequence, il.InvoiceLineItemAmount
Durch Angabe der Tabellennamen oder Verwendung von Aliasen , geben Sie explizit an, auf welche Spalten Sie verweisen, wodurch die Mehrdeutigkeit behoben wird und die Abfrage korrekt ausgeführt werden kann.
Das obige ist der detaillierte Inhalt vonWie kann der SQL-Fehler wegen mehrdeutiger Spaltennamen in Joins behoben werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!