在SQL中查询具有不明确列名的错误

jai*_*lob 29 sql

我在此查询(InvoiceID)中收到了一个不明确的列名称错误.我无法弄清楚为什么.它们似乎都正确连接,为什么管理工作室不知道显示VendorID?任何帮助将不胜感激.

查询:

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
Run Code Online (Sandbox Code Playgroud)

Sam*_*ami 43

我认为你只在InvoiceID中有歧义.其他领域似乎不同.所以试试吧

我只需用Invoices.InvoiceID替换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
Run Code Online (Sandbox Code Playgroud)

您可以对所有列使用tablename.columnnae(在选择,where,group by和order by中),而不使用任何别名.但是,您可以在其他答案的指导下使用别名


Gra*_*row 8

你有一个列InvoiceIDInvoices表中,并在InvoiceLineItems表中.查询执行引擎无法知道您想要返回哪一个.

添加表别名将有助于:

SELECT V.VendorName, I.InvoiceID, IL.InvoiceSequence, IL.InvoiceLineItemAmount
FROM Vendors V
JOIN Invoices I ON (...)
JOIN InvoiceLineItems IL ON (...)
WHERE ...
ORDER BY V.VendorName, I.InvoiceID, IL.InvoiceSequence, IL.InvoiceLineItemAmount
Run Code Online (Sandbox Code Playgroud)


Uch*_*uke 5

因为您要连接两个包含InvoiceID的表Invoices和InvoiceLineItems.更改为Invoices.InvoiceID以使其正确.