Задавайте вопросы, мы ответим
Вы не зашли.
Всем привет.
Есть 3 таблицы:
Продавцы: sellers (seller_id,seller_name)
Фрукты: fruits (fruit_id,fruit_name)
Таблица, в которой показано какие фрукты есть в наличии у каждого продавца: existense (seller_id,fruit_id)
Каждый продавец может продавать множество наименований фруктов, а может и ни одного не продавать.
Задача состоит в следующем: как выбрать из таблицы фруктов и таблицы продавцов только те фрукты, которых нет у определенного продавца? При этом в результате для определенного фрукта должен быть указан продавец с минимальным seller_id.
К примеру, есть 3 продавца:
(seller_id=1) Мария продает яблоки, груши;
(seller_id=2) Наталья продает груши, сливы;
(seller_id=3) Ольга продает яблоки, апельсины, сливы;
А нам нужно узнать какие фрукты и у кого можно купить, кроме тех, что есть у Марии. Результат должен быть такой:
сливы - Наталья,
апельсины - Ольга
Спасибо.
Неактивен
Надо действовать по логике:
1. Найти фрукты, которые продает Мария
SELECT x.fruit_id FROM existence x JOIN sellers s USING (seller_id) WHERE seller_name='Мария';
2. Найти те фрукты, которые она не продает
SELECT fruit_id FROM fruits WHERE fruit_id NOT IN ( .. подзапрос 1 .. );
3. Найти соответствующих продавцов
SELECT fruit_id, MIN(seller_id) as seller_id FROM existence WHERE fruit_id IN ( .. подзапрос 2 ..) GROUP BY 1;
4. Ну и, наконец, сделать это читаемым
SELECT seller_name, fruit_name
FROM sellers s JOIN ( .. подзапрос 3 .. ) x USING (seller_id) JOIN fruits USING (fruit_id);
Неактивен
3 можно упростить
SELECT fruit_id, MIN(seller_id) as seller_id FROM existence WHERE fruit_id NOT IN ( .. подзапрос 1 ..) GROUP BY 1;
Неактивен
Спасибо большое
Неактивен