CREATE TABLE product_categories (
tenant_id uuid NOT NULL,
product_id integer,
category_ids integer[],
PRIMARY KEY(tenant_id, product_id)
);
-- Insert sample data
INSERT INTO product_categories (tenant_id, product_id, category_ids) VALUES
('d1c06023-3421-4fbb-9dd1-c96e42d2fd02', 1, '{1,2,3}'),
('d1c06023-3421-4fbb-9dd1-c96e42d2fd02', 2, '{2,4}'),
('d1c06023-3421-4fbb-9dd1-c96e42d2fd02', 3, '{1,3,4}');
-- Find products that have categories in common with product_id 1
SELECT product_id, category_ids
FROM product_categories
WHERE category_ids && (
SELECT category_ids
FROM product_categories
WHERE product_id = 1
)
AND product_id != 1;
-- Find products that contain all categories of product_id 2
SELECT product_id, category_ids
FROM product_categories
WHERE category_ids @> (
SELECT category_ids
FROM product_categories
WHERE product_id = 2
);