Heim >Datenbank >MySQL-Tutorial >Wie kann der SQL-Fehler wegen mehrdeutiger Spaltennamen in Joins behoben werden?

Wie kann der SQL-Fehler wegen mehrdeutiger Spaltennamen in Joins behoben werden?

DDD
DDDOriginal
2025-01-01 11:12:11447Durchsuche

How to Resolve SQL's Ambiguous Column Name Error in Joins?

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!

Stellungnahme:
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