У меня есть три таблицы:
table 'received'
------------------
partner_id int
item_id int
table 'delivered'
------------------
item_id int
delivery_date date
customer_id int
table 'partners'
------------------
id int
name text
table 'customers'
------------------
id int
name text
Я хотел бы спросить, какие товары были доставлены какими партнерами за одну доставку клиенту. Иногда разные партнеры доставляют одни и те же предметы, которые должны быть отфильтрованы, так как доставленные предметы не содержат дубликатов.
Я придумал вот что:
select
partner_id,
count(distinct item_id)
from
received
where item_id in
(select distinct item_id from delivered where delivery_date = '2010-07-14' and customer_id = 1)
group by partner_id;
Тем не менее, это дает мне все доставленные вещи, включая обманщиков, которые доставили партнеры.
Я долго об этом думал, и пытался отобрать, используя «кроме», «имея» и другие, но не достиг того, что привело меня дальше.
Буду рад любым подсказкам в правильном направлении. Спасибо.
- Правка -
Вот некоторые примеры данных:
таблица «получено»
partner_id | item_id
-----------|---------
1 | 1
1 | 2
2 | 1
2 | 3
стол «доставлено»
item_id | delivery_date | customer_id
--------|---------------|------------
1 | 2010-07-14 | 1
2 | 2010-07-14 | 1
3 | 2010-07-14 | 1
Токовый выход:
partner | amount
--------|------
1 | 2
2 | 2
Желаемый вывод:
partner | amount
--------|------
1 | 2
2 | 1
Поскольку партнер с идентификатором 2 доставил товар, который уже был доставлен партнером 1.