Как объединить 2 таблицы на основе условий массива содержит - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть 2 таблицы:

Таблица продукта содержит столбец productTitle [строка] Product Table

Таблица соответствия ключевых слов содержит 2 столбца, категорию [строка] и ключевое слово [повторяющаяся запись - строка]

Примечание: ключевые слова являются взаимоисключающими: regexp_contains (ключевое слово) однозначно присваивает вам 1 спецификацию c cat_id

enter image description here

моя цель : объединить таблицу 2, чтобы у меня был cat_id для каждого ProdTitle

Join Logi c: если ключевое слово (без учета регистра) содержится в prodTitle, тогда назначьте category_id to prodTitle

как бы вы сделали это эффективным способом?

1 Ответ

2 голосов
/ 17 апреля 2020

Чтобы иметь по одной строке для каждого продукта, я сгруппировал его по 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...