Таблица 1
Таблица 2
Мне нужно присоединиться к таблице 1 и 2. Если элемент и элемент-2 совпадают с элементами в комплекте.
Желаемый результат
Я пытался использовать unnest безуспешно.
Left join (
select b_sku, array_agg(c_sku) as children
from p
group by p.b_sku
) y
ON i.sku = unnest(y.children)
Вот решение, которое может сработать для вас:
with table_a as (
select 'x' as item, 1000 as unit_sold union all
select 'y' as item, 500 as unit_sold union all
select 'k' as item, 500 as unit_sold
),
table_b as (
select 'x' as bundle_item, ['x', 'y'] as items_in_bundle union all
select 'y' as bundle_item, ['x', 'y', 'z'] as items_in_bundle union all
select 'k' as bundle_item, ['x', 'y', 'z'] as items_in_bundle
)
select * from table_a a
left join table_b b on a.item = b.bundle_item
where a.item in unnest(b.items_in_bundle)
В результате строка с элементом «k» не будет объединена, потому что элемент «k» находится вне массива «items_in_bundle».
Рассмотрим ниже запрос.
Мне нужно присоединиться к таблице 1 и 2. Если элемент и элемент-2 совпадают с элементами в комплекте.
WITH table1 AS (
SELECT 'x' item, 1000 unit_sold, 'y' item_2, 500 unit_2_sold
),
table2 AS (
SELECT 'a' bundle_items, ['x', 'y'] items_in_bundle UNION ALL
SELECT 'b', ['x', 'y', 'z'] UNION ALL
SELECT 'c', ['x', 'u', 'v']
)
SELECT *
FROM table1 t1 LEFT JOIN table2 t2
ON t1.item IN UNNEST(t2.items_in_bundle)
AND t1.item_2 IN UNNEST(t2.items_in_bundle);
Результаты запроса
Спасибо, работает отлично. Я использовал '=' вместо 'IN'. Ошибка новичка.