SQL limit SELECT, но не JOIN

Я реализую разбивку на страницы на своем BD. Моя проблема в том, что я хочу ограничить оператор SELECT, но не JOIN. Например, продукт может получить много цен:

SELECT * FROM product LEFT JOIN price ON product.id == price.id_product LIMIT 20 

Но я хочу получить 20 продуктов с каждой ценой. Как я могу ограничить оператор SELECT, но не LEFT JOIN.

Пример:

 product price.id price.id_pruct price.price 1 1 1 50 2 2 1 30 3 3 1 40 4 1 20 5 2 30 SELECT * FROM product LEFT JOIN price ON product.id == price.id_product LIMIT 3 

Вернуть:

 product price.id id_prodcut price 1 1 1 50 1 2 1 30 1 3 1 40 

Но я хочу

 product price.id id_prodcut price 1 1 1 50 1 2 1 30 1 3 1 40 1 4 1 20 2 5 2 30 3 . . . 

Три продукта (предел 3)

Благодарю. Я надеюсь, что вы можете мне помочь.

Я бы написал подзапрос, чтобы получить три первых продукта (или любое другое условие, которое вы выберете) следующим образом:

 SELECT id FROM product ORDER BY id LIMIT 3; 

Как только я это сделаю, я могу выбрать все из таблицы цены, пока идентификатор находится в этом подзапросе. Вы можете сделать это, используя соединение:

 SELECT p.* FROM price p JOIN( SELECT id FROM product ORDER BY id LIMIT 3) tmp ON tmp.id = p.product_id; 

Вот пример SQL Fiddle, использующий ваши данные образца, и я также добавил строку, которая не будет возвращена, чтобы вы могли видеть, что она работает.

Измените свой запрос, чтобы ограничить количество строк продукта до его присоединения к таблице цен. Это означает, что мы хотим объединить результаты запроса с таблицей или, другими словами, написать запрос, содержащий подзапрос:

 SELECT * FROM ( SELECT * FROM product ORDER BY id_product LIMIT 3 ) p LEFT JOIN price ON p.id = price.id_product 

Надеюсь, это поможет.