Мне действительно трудно express четко обозначить мою проблему в заголовке в одном предложении. Но вот объяснение и примеры данных:
https://www.db-fiddle.com/f/tfamoNxujZhfTzxPPzefLt/2
create table customer_promotions (
customer_id integer,
promotion_id integer);
create table promotions (
promotion_id integer,
type text,
product_type text,
percentage integer);
insert into customer_promotions values
(1,1),
(1,5),
(2,3),
(2,4),
(3,6),
(4,2);
insert into promotions values
(1,'fixed_value', 'food',5),
(2,'fixed_value', 'food',10),
(3,'percentage', 'food',10),
(4,'percentage', 'clothes',10),
(5,'fixed_value', 'electronics',20),
(6,'percentage', 'electronics',10),
(7,'fixed_value', 'toys',15);
Я хочу найти все рекламные акции для конкретного клиента (скажем, customer_id = 1
), что еще не используются (присутствуют в таблице customer_promotions) И не разделяют те же type
и product_type
, которые уже используются.
Поэтому для клиента 1 должен быть результат: promo_id 3 4 6 7 Я считаю, есть какое-то простое решение с использованием левого соединения, но сейчас я имею в виду черную дыру. Был бы очень признателен за помощь.