Mysql
 sql >> Database >  >> RDS >> Mysql

mysql ...in cui la clausola è ambigua

L'errore che ricevi ti dice che la colonna CategoryID nel tuo WHERE la clausola è ambigua, ciò significa che il sistema ha un problema nell'identificare la colonna appropriata perché sono presenti più CategoryID colonne.

Per risolvere questo problema, usa l'alias per specificare quale colonna vuoi usare per il tuo WHERE clausola:

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

Ho anche modificato un po' la query per ottenere lo stesso risultato ma invece di usare una combinazione di LEFT JOIN + IN clausola + sottointerrogazione, ho usato INNER JOIN clausole.Con questa query devi solo definire il CategoryID desiderato una volta e otterrà automaticamente tutte le categorie figlio.

Non sono sicuro che la tua query venga eseguita correttamente perché stai utilizzando il COUNT funzione senza raggruppare i risultati per CategoryID ...

Spero che questo ti aiuterà.