Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > Выборка из двух таблиц по минимальному значению


Автор: olexdj 10.4.2013, 02:34
Драсьте.
Есть таблицы. 1 - Товары. 2 - Цены на товары от разных поставщиков, 1 товар может быть у разных поставщиков с разной ценой.

Задача выбирать товары определенного бренда из 1-й таблицы и 1 строку c наименьшей ценой из другой таблицы по каждой модели.
Все работало ок, пока не понадобилось брать из 2-й таблицы еще 1 параметр (типа спецпредложение на данный товар, да/нет). Так вот этот параметр уже берется совсем из другой записи, не с той там где меньшая цена указана ((

Например:

Код

Таблица 1. cat
id / model / brand

Таблица 2. price
id / cat_id / price / param


Выбираю так:

Код

select a.id, a.model, a.brand, min(b.price), b.param 
from cat a, price b
where a.id = b.cat_id and a.brand='SONY'
group by b.cat_id


Все четко выбирает, и цена минимальная, а параметр param совсем из другой строки, от другого поставщика ((( 
Как побороть?  smile

Добавлено @ 02:37
Без "group by b.cat_id" выбирает только 1 модель бренда с наименьшей ценой.

Без "group by b.cat_id" и без "min" выбирает все модели из 1й таблицы и все цены от разных поставщиков на каждый товар из 2-й таблицы, а нужно только 1 с наименьшей ценой.

Добавлено через 13 минут и 20 секунд
Пока нашел временный костыль, отмечаю параметр одинаковым у всех поставщиков на конкректную модель, но это не дело, надо побороть.

Автор: olexdj 10.4.2013, 03:16
Еще один нашел временный костыль - выбираю "max(b.param)", чтобы просто узнать, есть ли у этой модели спецпредложение, но оно не обязательно соответствует строке с min(b.price)

Автор: _zorn_ 10.4.2013, 06:45
Код
select a.id, a.model, a.brand, b.price, b.param 
from cat a, price b
where a.id = b.cat_id and a.brand='SONY'
group by b.cat_id
ORDER BY b.price ASC

Автор: Akina 10.4.2013, 08:16
См. http://www.sql.ru/forum/actualthread.aspx?tid=687908. Задача, видимо, Т3.

Автор: olexdj 11.4.2013, 00:51
_zorn_, че-то выбирает "b.price" больший а не меньший (((   smile 


Akina, блин, эти джойны для меня темный лес, попробую разобраться.. smile 

Автор: _zorn_ 19.4.2013, 07:04
Цитата(olexdj @ 11.4.2013,  00:51)
_zorn_, че-то выбирает "b.price" больший а не меньший (((   smile 

Ну значит
Код
ORDER BY b.price DESC

забыл ньюансы.

Автор: Akina 19.4.2013, 08:32
_zorn_, да неверен запрос, неверен. И если он даёт ВДРУГ верную выборку - это не навсегда. Завтра на этих же данных он вполне может дать ту же ошибку - 
Цитата(olexdj @  10.4.2013,  03:34 Найти цитируемый пост)
этот параметр уже берется совсем из другой записи, не с той там где меньшая цена указана 

Причём эти грабли явно описаны в документации. Правда, её никто и никогда не читает...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)