Чтобы иметь по одной строке для каждого продукта, я сгруппировал его по productId и productTitle. Если вы не хотите использовать group by, вы можете просто удалить его и изменить ARRAY_AGG(cat_id)
на обычный cat_id
. Итак, я думаю, что вы можете использовать это.
WITH
products AS (
SELECT 1 productId, 'lorem ipsum cat1 lorem ipsum' as productTitle union all
SELECT 2 productId, 'lorem ipsum cat2 lorem ipsum' as productTitle union all
SELECT 3 productId, 'lorem ipsum cat3 lorem ipsum' as productTitle union all
SELECT 4 productId, 'lorem ipsum cat4 lorem ipsum' as productTitle
),
categories AS (
SELECT 1 as cat_id, ['cat1', 'something', 'else'] as keywords union all
SELECT 2 as cat_id, ['cat2', 'another', 'keyword'] as keywords
)
select productId, productTitle, ARRAY_AGG(cat_id) categories
from products p
cross join categories c
WHERE EXISTS (SELECT 1 FROM UNNEST(c.keywords) as k WHERE p.productTitle LIKE CONCAT('%', k, '%'))
GROUP BY 1,2