在使用 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 限制整个结果集中的最大行数,并顺便截断项目记录的中途。

我目前正在做两个查询,但除了在架构上一点也不理想之外,它实际上被证明很难协调(这很有意义,因为我肯定做错了)。我没有找到任何关于如何协调 LIMITLEFT 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