【问题标题】:Column 'id' in field list is ambiguous - Recommendation System字段列表中的“id”列不明确 - 推荐系统
【发布时间】:2018-05-07 16:15:30
【问题描述】:

我正在尝试在我的表 Accounts 中职业 ID 与职业 ID 匹配的产品中列出并不断收到上述错误。

SELECT productID, productName, productDesc, productImgPath, 
       productPrice, catID, occupationID, Accounts.occupationID  
FROM Products 
JOIN Accounts ON occupationID = Accounts.occupationID 
WHERE occupationID = Accounts.occupationID

【问题讨论】:

  • “FROM Products JOIN Accounts ONoccupationID = Accounts.occupationID”完全限定了您加入中的所有元素。越来越糊涂了。

标签: sql ambiguous


【解决方案1】:

虽然您没有“id”列 - 我认为您只需要完全限定您的陈述;

SELECT productID, productName, productDesc, productImgPath, 
       productPrice, catID, occupationID, Accounts.occupationID  
FROM Products 
JOIN Accounts ON Products.occupationID = Accounts.occupationID 

您不再需要 WHERE,因为它的作用与加入相同

WHERE Products.occupationID = Accounts.occupationID

【讨论】:

    【解决方案2】:

    这是因为occupitionId 在产品和帐户中都存在歧义。
    完全限定该字段。

        SELECT productID, productName, productDesc, productImgPath, productPrice, P.catID, P.occupationID, A.occupationID
        FROM Products P JOIN Accounts A ON P.occupationID = A.occupationID
    

    注意:您的 WHERE 子句是多余的,因为它已在连接中处理。

    【讨论】:

      【解决方案3】:

      我没有在您的查询中找到任何id 列,但我建议使用alise,它可能更易于阅读和编写。

      SELECT p.productID, p.productName, p.productDesc, p.productImgPath, 
             p.productPrice, a.catID, p.occupationID, a.occupationID  
      FROM Products p -- use of alise p instead of table_name
      INNER JOIN Accounts a ON p.occupationID = a.occupationID 
      --WHERE occupationID = Accounts.occupationID (redundant where clause)
      

      请检查列选择并改用准确或正确的表别名。

      【讨论】:

        猜你喜欢
        • 2011-10-02
        • 1970-01-01
        • 2016-06-28
        • 1970-01-01
        • 1970-01-01
        • 2020-09-01
        • 2020-07-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多