2010-08-15 3 views
4

У меня есть следующий запрос:SQL LEFT JOIN с COUNT (*) проблемы

SELECT products_categories.categoryID, name, COUNT(*) AS itemCount 
FROM products_categories 
LEFT JOIN products_to_categories ON products_to_categories.categoryID = products_categories.categoryID 
GROUP BY products_categories.categoryID 

Но все-таки есть проблема: категории без продуктов в них возвращаются itemCount = 1 вместо 0. Как я могу это исправить?

+0

вместо LEFT JOIN просто используйте JOIN – YoK

+0

@YoK Спасибо за предложение. Можете ли вы объяснить, почему JOIN будет лучше в этом случае? – naburi

ответ

4

Вы попробовали COUNT(products_to_categories.categoryID) AS itemCount? Я не совсем уверен, но подумал бы, что, может быть, проблема кроется в COUNT(*).

1
COUNT(products_to_categories.categoryID) 

COUNT(*) Просить дает 1, по крайней мере, потому что, в конце концов, является 1 ряд. Конкретные подсчеты требуют специального лечения.

-1
SELECT products_categories.categoryID, name, COUNT(*) AS itemCount 
FROM products_categories 
LEFT JOIN products_to_categories ON products_to_categories.categoryID = products_categories.categoryID 
GROUP BY products_categories.categoryID 
WHERE itemCount <> '0' 
4

Попробуйте COUNT(product_name) или любой другой, вместо COUNT(*).