SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 12.02.2008 13:40:40

kiosuki
Участник
Зарегистрирован: 12.02.2008
Сообщений: 5

Помогите верно составить запрос!

Всем привет.

Есть 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) Ольга продает яблоки, апельсины, сливы;

А нам нужно узнать какие фрукты и у кого можно купить, кроме тех, что есть у Марии. Результат должен быть такой:

сливы - Наталья,
апельсины - Ольга

Спасибо.

Неактивен

 

#2 12.02.2008 13:54:51

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Помогите верно составить запрос!

Надо действовать по логике:
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);

smile

Неактивен

 

#3 12.02.2008 13:57:24

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Помогите верно составить запрос!

3 можно упростить
    SELECT fruit_id, MIN(seller_id) as seller_id FROM existence WHERE fruit_id NOT IN ( .. подзапрос 1 ..) GROUP BY 1;

Неактивен

 

#4 06.03.2008 19:03:02

kiosuki
Участник
Зарегистрирован: 12.02.2008
Сообщений: 5

Re: Помогите верно составить запрос!

Спасибо большое

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson