Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

mysql ...in where a cláusula é ambígua


O erro que você recebe informa que a coluna CategoryID em seu WHERE cláusula é ambígua, isso significa que o sistema tem um problema para identificar a coluna apropriada porque existem vários CategoryID colunas.

Para corrigir esse problema, use o alias para especificar qual coluna você deseja usar para seu WHERE cláusula:
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

Também alterei um pouco a consulta para obter o mesmo resultado, mas em vez de usar uma combinação de LEFT JOIN + IN cláusula + subconsulta, usei INNER JOIN cláusulas. Com esta consulta, você só precisa definir o CategoryID desejado uma vez e obterá automaticamente todas as categorias filhas.

Não tenho certeza se sua consulta foi executada corretamente porque você está usando o COUNT função sem agrupar os resultados por CategoryID ...

Espero que isso irá ajudá-lo.