## Контекст (таблицы и пример данных) ### Таблицы - `customers(id, name)` - `orders(id, customer_id
SQL Developer
Senior
## Контекст (таблицы и пример данных)
### Таблицы
- `customers(id, name)`
- `orders(id, customer_id)`
- `order_items(order_id, product_id)`
### Пример данных
**customers**
| id | name |
|---:|------|
| 1 | A |
| 2 | B |
**orders**
| id | customer_id |
|----:|------------:|
| 10 | 1 |
| 11 | 1 |
| 20 | 2 |
**order_items**
| order_id | product_id |
|---------:|-----------:|
| 10 | 101 |
| 11 | 102 |
| 20 | 101 |
---
## Задача
Есть целевой набор товаров: `{101, 102}`.
Найти клиентов, которые купили **все** товары из набора (в любых заказах).
Вернуть: `customer_id`, `name`.
Ответы
```sql
WITH target(product_id) AS (
VALUES (101), (102)
), cust_products AS (
SELECT DISTINCT o.customer_id, oi.product_id
FROM orders o
JOIN order_items oi ON oi.order_id = o.id
)
SELECT c.id, c.name
FROM customers c
WHERE NOT EXISTS (
SELECT 1
FROM target t
WHERE NOT EXISTS (
SELECT 1
FROM cust_products cp
WHERE cp.customer_id = c.id
AND cp.product_id = t.product_id
)
);
```