Исходя из вашего результата и SQL, я думаю, вы можете попробовать это.
просто JOIN
и COUNT
. Условие Вы можете перейти к WHERE
из HAVING
, поскольку ВЫХОДИТ из условия агрегатной функции.
Схема (MySQL v5.7)
create table Products(
productId int,
productName varchar(50)
);
create table CATEGORIES (
catId int,
catName varchar(50),
ParentCategory int
);
insert into CATEGORIES values (101,'Vegetable',111);
insert into CATEGORIES values (110,'Chair',0);
insert into CATEGORIES values (111,'Edible',0);
insert into CATEGORIES values (112,'Table',0);
insert into CATEGORIES values (113,'Rooms',0);
create table PRODUCT_CATEGORIES_RELATION(
id int,
productId int,
catId int
);
insert into Products values (1,'corns');
insert into Products values (2,'Turmeric');
insert into Products values (3,'Cornetto');
insert into PRODUCT_CATEGORIES_RELATION values (1,1,101);
insert into PRODUCT_CATEGORIES_RELATION values (2,1,111);
insert into PRODUCT_CATEGORIES_RELATION values (3,2,111);
insert into PRODUCT_CATEGORIES_RELATION values (4,3,111);
Запрос № 1
SELECT pcr.catId,COUNT(*),c.ParentCategory
FROM
Products p
LEFT JOIN PRODUCT_CATEGORIES_RELATION pcr ON pcr.productId = p.productId
LEFT JOIN CATEGORIES c on c.catId = pcr.catId
GROUP BY pcr.catId,c.ParentCategory;
| catId | COUNT(*) | ParentCategory |
| ----- | -------- | -------------- |
| 101 | 1 | 111 |
| 111 | 3 | 0 |
Просмотр на БД Fiddle