小编典典

SQL限制SELECT但不限制JOIN

sql

我正在对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件)

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


阅读 161

收藏
2021-04-15

共1个答案

小编典典

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

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
示例,并且我还添加了不会返回的行,因此您可以看到它有效。

2021-04-15