Forum Webscript.Ru
Общие => Базы данных => Тема начата: Nickolaz от 08 Февраля 2007, 22:52:20
-
Есть такие таблички:
orders
Id
name
status
Id
s_name
s_ord
status_order
Id
o_id
s_id
в табличке status_order - связь двух других таблиц "многие ко многим".
В s_ord - порядок следования статусов.
Надо выбрать за один запрос все name, а также один связанный статус, причем максимальный по s_ord.
что-то я запутался мыслями (
-
СУБД какая?
-
mysql
-
версия - 4.0, поэтому вложенные запросы не работают :(
Решение нашел через временную таблицу + добавление к ней индекса
create temporary table temp_tab
select os.o_id,max(oss.s_ord) as mx
from status oss,status_order os
where os.st_id=oss.Id
group by os.o_id;
alter table temp_tab add index(o_id);
select o.Id,oss.s_name
from orders o
left join temp_tab h on h.o_id=o.Id
left join status oss on oss.s_ord=h.mx
group by o.Id;
drop table if exists temp_tab;
Хотелось бы это решить за один единственный запрос, если это возможно. Если нет - хочу просто в этом удостовериться, чтоб мастер какой-нибудь сказал "Это сделать нельзя" :)
К тому же в данном случае поле порядка - s_ord - должно быть уникальным. На практике это соблюдается, но хотелось бы, чтобы запрос работал и с дублирующимися значениями порядка.