在使用 LEFT JOIN 时对单个 table 的行实施 LIMIT
Implementing LIMIT against rows of single table while using LEFT JOIN
鉴于一个相当刻板的场景,一个项目 table 被一个图像 table 引用,为同一项目持有多个图像,我试图弄清楚如何检索 specific 数量的 items,同时收集 all 图像行.
设置很简单,看起来像:
CREATE TABLE items (
id INTEGER PRIMARY KEY,
...
...
)
CREATE TABLE images (
item_id INTEGER PRIMARY KEY,
url STRING,
...
...
)
LIMIT 20
限制整个结果集中的最大行数,并顺便截断项目记录的中途。
我目前正在做两个查询,但除了在架构上一点也不理想之外,它实际上被证明很难协调(这很有意义,因为我肯定做错了)。我没有找到任何关于如何协调 LIMIT
与 LEFT JOIN
的信息,所以我想问一下。谢谢!
注意。与此类似的问题确实存在,但询问如何做诸如检索每个项目的前(比如说)5 张图像之类的事情。我正在寻找检索(比如说)10 件商品并获取每件商品的所有图像。
这样的查询:
SELECT * FROM items ORDER BY ? LIMIT 10
将从 items
.
中 return 10 行(最多)
如果您有一些特定的排序条件,则需要为 ORDER BY
子句提供列。
如果不是,则删除 ORDER BY
子句,但在这种情况下,无法保证您将获得结果集。
所以你所要做的就是 LEFT
将上面的查询加入到 images
:
SELECT it.*, im.*
FROM (SELECT * FROM items ORDER BY ? LIMIT 10) it
LEFT JOIN images im
ON im.item_id = it.id
鉴于一个相当刻板的场景,一个项目 table 被一个图像 table 引用,为同一项目持有多个图像,我试图弄清楚如何检索 specific 数量的 items,同时收集 all 图像行.
设置很简单,看起来像:
CREATE TABLE items (
id INTEGER PRIMARY KEY,
...
...
)
CREATE TABLE images (
item_id INTEGER PRIMARY KEY,
url STRING,
...
...
)
LIMIT 20
限制整个结果集中的最大行数,并顺便截断项目记录的中途。
我目前正在做两个查询,但除了在架构上一点也不理想之外,它实际上被证明很难协调(这很有意义,因为我肯定做错了)。我没有找到任何关于如何协调 LIMIT
与 LEFT JOIN
的信息,所以我想问一下。谢谢!
注意。与此类似的问题确实存在,但询问如何做诸如检索每个项目的前(比如说)5 张图像之类的事情。我正在寻找检索(比如说)10 件商品并获取每件商品的所有图像。
这样的查询:
SELECT * FROM items ORDER BY ? LIMIT 10
将从 items
.
中 return 10 行(最多)
如果您有一些特定的排序条件,则需要为 ORDER BY
子句提供列。
如果不是,则删除 ORDER BY
子句,但在这种情况下,无法保证您将获得结果集。
所以你所要做的就是 LEFT
将上面的查询加入到 images
:
SELECT it.*, im.*
FROM (SELECT * FROM items ORDER BY ? LIMIT 10) it
LEFT JOIN images im
ON im.item_id = it.id