sql >> Databasteknik >  >> RDS >> Mysql

mysql ...i där klausulen är tvetydig

Felet du får talar om för dig att kolumnen CategoryID i din WHERE klausulen är tvetydig, det betyder att systemet har problem med att identifiera lämplig kolumn eftersom det finns flera CategoryID kolumner.

För att lösa det här problemet, använd aliaset för att ange vilken kolumn du vill använda för din WHERE klausul:

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

Jag ändrade också lite på frågan för att få samma resultat men istället för att använda en kombination av LEFT JOIN + IN klausul + underfråga, jag använde INNER JOIN klausuler. Med den här frågan behöver du bara definiera önskat CategoryID en gång och det kommer automatiskt att få alla barnkategorier.

Jag är inte säker på att din fråga körs korrekt eftersom du använder COUNT funktion utan att gruppera resultaten efter CategoryID ...

Hoppas detta hjälper dig.



  1. Hur installerar man pyodbc 64-bitars?

  2. Använder utf8mb4 med php och mysql

  3. SQL - OM FINNS UPPDATERA ANNARS INSERT INTO

  4. PHP MySQL-anslutningsbeständighet