1
我有collections
和images
表之间的1-n关系。内部加入表使用限制
我的目标是选择所有集合,并给出一个条件以及找到的任何集合的前3个图像。
我怎么现在就这样做:在集合
查询:
SELECT * FROM "collections" WHERE SOME_CONDITION
选择所有集合后,我运行这样的查询为每个集合:
SELECT * FROM "images" WHERE "images"."collection_id" = MY_CURRENT_COLLECTION_ID LIMIT 3
我的目标是在一个查询中做到这一点:
SELECT "images".*
,"collections".*
FROM "collections"
INNER JOIN (SOME_MAGIC_TO_GET_THE_TOP_THREE_IMAGES_FOR_EACH_COLLECTION) AS "images" ON "images"."collection_id" = "collections"."id"
WHERE SOME_CONDITION
有什么想法?
P.S.我正在使用postgresql。
SELECT img.*,
collections.*
FROM collections
JOIN (
select *,
row_number() over (partition by collection_id order by something) as rn
from images
) img ON img.collection_id = collections.id AND img.rn <= 3
WHERE ....;
注意分配ROW_NUMBER()只能在一个稳定的方式,如果你可以通过一些命令行: