SQL UPDATE base on COUNT
I have two tables
- product-table with fields (id, category_id)
- category-table with fields (id, num_of_products)
The product table contains multiple products in different categories. And I know how to count product in each categories using
SELECT category_id, COUNT(product.id) as count FROM product GROUP BY category_id
But how do I update category.num_of_product using a single sql query with the result of the SELECT .... ? I have tried but can not figure out the proper syntax !!
UPDATE c
SET num_of_products = count
FROM category c
INNER JOIN
(SELECT category_id as id, COUNT(product.id) as count FROM product GROUP BY category_id) d ON c.id = d.id
Any suggestions ?
Solution 1:
Try this query:
UPDATE category c
JOIN (SELECT category_id, COUNT(id) cnt
FROM product GROUP BY category_id) p
ON c.id=p.category_id
SET c.num_of_products=cnt;
If you want to do UPDATE
with JOIN
, you must do the JOIN
first then followed with SET
. If there are conditions then you need to add WHERE
after the SET
. For example, let's say there are some category you don't want to update then probably:
UPDATE category c
JOIN (SELECT category_id, COUNT(id) cnt
FROM product GROUP BY category_id) p
ON c.id=p.category_id
SET c.num_of_products=cnt
WHERE c.id NOT IN (1,2);
Demo fiddle