Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Abfragefehler mit mehrdeutigem Spaltennamen in SQL

Dieser Fehler tritt auf, wenn wir Daten aus mehr als einer Tabelle auswählen durch Verbinden von Tabellen und mindestens einer der ausgewählten Spalten (es passiert auch, wenn Sie * verwenden, um alle Spalten auszuwählen) mit demselben Namen in mehr als einer Tabelle vorhanden sind (unsere ausgewählten/verbundenen Tische). In diesem Fall müssen wir angeben, aus welcher Tabelle wir die Spalte auswählen.

Im Folgenden finden Sie eine beispielhafte Lösungsimplementierung des oben erläuterten Konzepts

Ich denke, Sie haben nur in InvoiceID Mehrdeutigkeiten die sowohl in InvoiceLineItems existiert und Invoices Andere Felder scheinen unterschiedlich zu sein. Versuchen Sie es also mit diesem

Ich ersetze einfach Rechnungs-ID durch Rechnungen.Rechnungs-ID

   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

Sie können tablename.columnnae für alle Spalten (in selection, where, group by und order by) verwenden, ohne einen Alias ​​zu verwenden. Sie können jedoch einen Alias ​​verwenden, wenn Sie sich von anderen Antworten leiten lassen