SQL 限制 SELECT 但不能加入

SQL limit SELECT but not 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

Return:

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)

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

修改您的查询以限制产品行数,然后再将其加入价格 table。这意味着我们要将查询的结果连接到 table,或者换句话说,我们编写一个包含子查询的查询:

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

希望对您有所帮助。

我会编写一个子查询来获取前三个产品(或您选择的任何条件),如下所示:

SELECT id
FROM product
ORDER BY id
LIMIT 3;

一旦我有了它,我就可以 select 价格 table 的所有东西,只要该 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 示例,我还添加了一个不会返回的行,因此您可以看到它有效。