我在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)
感谢。我希望你能帮助我。
答案 0 :(得分:3)
修改查询以限制产品行数,然后再将其加入价格表。这意味着我们想要将查询结果连接到表,或者换句话说,我们编写包含子查询的查询:
SELECT *
FROM (
SELECT *
FROM product
ORDER BY id_product
LIMIT 3
) p
LEFT JOIN price ON p.id = price.id_product
希望有所帮助。
答案 1 :(得分:2)
我会写一个子查询来获得三个第一个产品(或者你选择的任何条件),如下所示:
SELECT id
FROM product
ORDER BY id
LIMIT 3;
有了这个,只要id在该子查询中,我就可以从价格表中选择所有内容。您可以使用联接来执行此操作:
SELECT p.*
FROM price p
JOIN(
SELECT id
FROM product
ORDER BY id
LIMIT 3) tmp ON tmp.id = p.product_id;
以下是使用您的示例数据的SQL Fiddle示例,我还添加了一行不会返回的行,以便您可以看到它的工作原理。