MySQL Показать категории и их количество для компании в одном запросе - PullRequest
0 голосов
/ 10 февраля 2012

Я пытаюсь отобразить количество категорий, даже если 0, для companyId = 2 в одном запросе:

categories
+--------+-----------+
| catId  |  catName  |
+--------+-----------+
|   1    |   cat1    |
|   2    |   cat2    |
|   3    |   cat3    |

products
+--------+-----------+---------------+---------+
| prodId | prodName  |   companyId   |  catId  |
+--------+-----------+---------------+---------+
|   1    |   prod1   |       2       |    1    |
|   2    |   prod2   |       2       |    3    |
|   3    |   prod3   |       1       |    3    |

SELECT c.catName, COUNT(p.catId) AS prod_catCount
FROM categories c
LEFT JOIN products p ON c.catId=p.catId
WHERE p.companyId=2
GROUP BY c.catId

Это приводит к:

+---------+---------------+
| catName | prod_catCount |
+---------+---------------+
|  cat1   |       1       |
|  cat3   |       1       |

Как можноЯ делаю это в результате:

+---------+---------------+
| catName | prod_catCount |
+---------+---------------+
|  cat1   |       1       |
|  cat2   |       0       | <-- Shows 0 count as well
|  cat3   |       1       |

Я думал, что левое соединение позаботится об этом, но это не так.Есть идеи, как заставить это работать?

1 Ответ

4 голосов
/ 10 февраля 2012

Переместить p.companyId=2 из предложения WHERE в предложение ON

SELECT c.catName, COUNT(p.catId) AS prod_catCount
FROM categories c
LEFT JOIN products p ON c.catId=p.catId AND p.companyId=2
GROUP BY c.catId
...