SQL限制SELECT但不是JOIN

时间:2015-07-08 14:51:21

标签: mysql sql select join limit

我在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)

感谢。我希望你能帮助我。

2 个答案:

答案 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示例,我还添加了一行不会返回的行,以便您可以看到它的工作原理。