小编典典

mysql — where子句不明确

sql

SELECT
                cat.CategoryID as CategoryID,
                count(p.ProductID) as CountProducts
            FROM 
                Category as cat
                LEFT JOIN Products as p on p.CategoryID IN 
                       (SELECT CategoryID FROM Category as cd 
                           WHERE cd.ParrentCategoryID = '876')
            WHERE 
                CategoryID = '876'
            ORDER by Name

我们得到错误-“ where子句不明确的列’CategoryID’”。

告诉我请怎么会好?


阅读 36

收藏
2021-04-07

共1个答案

小编典典

您得到的错误告诉CategoryIDWHERE子句中的列是不明确的,这意味着系统存在标识适当列的问题,因为存在多个CategoryID列。

为了解决此问题,请使用别名指定要用于WHERE子句的列:

SELECT cat2.CategoryID AS CategoryID
    ,cat2.Name AS CategoryName
    ,COUNT(p.ProductID) AS CountProducts
FROM Category AS cat
INNER JOIN Category AS cat2 ON cat2.ParrentCategoryID = cat.CategoryID
INNER JOIN Products AS p ON p.CategoryID = cat2.CategoryID
WHERE cat.CategoryID = '876'
GROUP BY cat2.CategoryID, cat2.Name
ORDER BY cat2.Name

我还更改了查询以获取相同的结果,但我没有使用LEFT JOIN+IN子句+子查询的组合,而是使用了INNER JOIN子句。使用此查询,您只需定义CategoryID一次所需的内容,它将自动获取每个子类别。

我不确定您的查询是否正确运行,因为您正在使用该COUNT功能,而没有按CategoryID…分组结果

希望这会帮助你。

2021-04-07