L'erreur que vous obtenez vous indique que la colonne CategoryID
dans votre WHERE
la clause est ambiguë, cela signifie que le système a un problème pour identifier la colonne appropriée car il y a plusieurs CategoryID
colonnes.
Afin de résoudre ce problème, utilisez l'alias pour spécifier la colonne que vous souhaitez utiliser pour votre WHERE
clause :
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
J'ai aussi un peu changé la requête pour obtenir le même résultat mais au lieu d'utiliser une combinaison de LEFT JOIN
+ IN
clause + sous-requête, j'ai utilisé INNER JOIN
clauses.Avec cette requête, il vous suffit de définir votre CategoryID
souhaité une fois et il obtiendra automatiquement toutes les catégories enfants.
Je ne suis pas sûr que votre requête s'exécute correctement car vous utilisez le COUNT
fonction sans grouper les résultats par CategoryID
...
J'espère que cela vous aidera.