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

新手上路,请多包涵

此查询 (InvoiceID) 出现不明确的列名错误。我不知道为什么。它们似乎都已正确连接,那么为什么 SSMS 不知道显示 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

原文由 jaielob 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.8k
2 个回答

当我们通过连接表从 多个表 中选择数据并且 至少一个选定的列(使用 \* 选择所有列时也会发生) 在多个表中存在同名 时,我们会遇到此错误(我们选择的/加入的表)。在这种情况下,我们必须指定从哪个表中选择列。

以下是上述概念的示例解决方案实现

我认为您仅在 InvoiceID 中存在歧义,在 InvoiceLineItemsInvoices 中都存在其他字段似乎不同。所以试试这个

我只是用 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

您可以在不使用任何别名的情况下对所有列(在选择、位置、分组依据和排序依据)使用 tablename.columnnae。但是,您可以按照其他答案的指导使用别名

原文由 Sami 发布,翻译遵循 CC BY-SA 4.0 许可协议

它输出(错误)不明确的列名,因为它对从何处获取数据感到困惑,因为您可能在两个不同的表或数据集中具有相同的查询名称“InvoiceID”(检查您在 where 子句中使用的所有表,InvoiceID 应该是至少有两个)。要更正此类错误,您应该始终指定查询及其表。由于您要从供应商那里提取此数据,请将其指定为“vendors.InvoiceID”。对于所有其他查询,即使它没有给您错误。

原文由 aditya14581 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进