By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
CREATE TABLE category_product (`category_id` INTEGER, `product_id` INTEGER);
INSERT INTO category_product (`category_id`, `product_id`) VALUES
('3', '9'),
('3', '28'),
('3', '100'),
('7', '13'),
('7', '21'),
('7', '81'),
('7', '100'),
('25', '22'),
('25', '28'),
('25', '100');
SELECT cp.category_id, COUNT(*) counter
FROM category_product cp
WHERE NOT EXISTS (SELECT 1 FROM category_product WHERE product_id = cp.product_id AND category_id <> cp.category_id)
GROUP BY cp.category_id
category_id | counter |
---|---|
3 | 1 |
7 | 3 |
25 | 1 |
SELECT category_id, COUNT(*) counter
FROM category_product
WHERE product_id IN (
SELECT product_id
FROM category_product
GROUP BY product_id
HAVING COUNT(*) = 1
)
GROUP BY category_id
category_id | counter |
---|---|
3 | 1 |
7 | 3 |
25 | 1 |