JOIN and LIMIT — одним запросом(+)

Sherman

Mephi
JOIN and LIMIT — одним запросом(+)

Возможно ли реализовать одноим запросом, чтобы самая левая таблица в объединение(ях) лимитировалась, а join делался уже по ограниченному числу записей?

Т.е. сначал выполнялся бы выбор из первой таблицы с ограничением, а затем уже объединения?
 

Sherman

Mephi
распишу еще более подробно, скажем есть такая структура:

tbl1
{t1_id, ...)
tbl2
(t2_id, t1_id, ...)
tbl3
(t3_id, t2_id, ...)

нужно сделать обычное обединение:

select * from tbl1 t1
join tbl2 t2 on
t1.t1_id = t2.t1_id
join tbl3 t3 on
t2.t2_id = t3.t2_id
where ....

Но записей в таблице t1 доволньо много, и еще больши их в t2, t3 соответсвенно, поэтому нужно сделать выборку, части записей из t1, с объеденением по t2, а t2 соответсвенно с t3.

Если написать просто лимит, то он будет действовать на общее количество выбранных записей(а это Декартово произведение), а мне нужно, чтобы лимитировалось кол-во записей из t1, уже потом срабатывало бы объединение. Очень хочется сделать это одним запросом.
 

basboy

Новичок
Я же тебе сказал, что нужно юзать.

select * from tbl1 t1
left join tbl2 t2 on
t1.t1_id = t2.t1_id
left join tbl3 t3 on
t2.t2_id = t3.t2_id
where ....
 

alexhemp

Новичок
Sherman

Нельзя. Разбей на 2 запроса, сделай временную таблицу. А в "лоб" - нельзя. Ведь LIMIT зависит от ORDER BY
 

Sherman

Mephi
Кстати, есть таки выход, правда для этого надо иметь возможность создавать user function(это умеют почти все нормальные СУБД). Тогда:

Создаем функцию с параметров, в котором указываем кол-во записей. Тип возвращаемого значения таблица.

А затем используем ее в обычном запросе вместе с joins.
 

Steamroller

Новичок
Да можно в принципе и джоинить на подзапрос с LIMIT.
Только ересь все равно это.
 

Sherman

Mephi
Ну почему же.

Достаочно стандартная задача.

Постраничный вывод информации.

В более менее крупной СУБД почти везде есть джоины...
 

chira

Новичок
Sherman
ты можешь сформулировать условие фильтра для t1?
или ты хочешь взять всё равно какие, но к примеру только 10 записей из t1?
 

Sherman

Mephi
Условия для фильтра t1:

Смещение + 10 записей(limit offset, 10)

Отсротированных: по дате по убыванию(date desc).
 
Сверху