Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Erreur de requête avec un nom de colonne ambigu dans SQL

Nous rencontrons cette erreur lorsque nous sélectionnons des données de plusieurs tables en joignant des tables et au moins une des colonnes sélectionnées (cela arrivera également lorsque vous utilisez * pour sélectionner toutes les colonnes) existe avec le même nom dans plusieurs tables (nos tables sélectionnées/jointes). Dans ce cas, nous devons spécifier à partir de quelle table nous sélectionnons la colonne.

Ce qui suit est un exemple d'implémentation de solution du concept expliqué ci-dessus

Je pense que vous avez une ambiguïté uniquement dans InvoiceID qui existe à la fois dans InvoiceLineItems et Invoices D'autres domaines semblent distincts. Alors essayez ceci

Je remplace simplement InvoiceID par Invoices.InvoiceID

   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

Vous pouvez utiliser tablename.columnnae pour toutes les colonnes (dans selection, where, group by et order by) sans utiliser d'alias. Cependant, vous pouvez utiliser un alias comme guidé par d'autres réponses