select
book1.id as col_0_0_,
book1.title as col_2_0_,
images1_.id as col_5_0_,
images1_.filesize as col_9_0_
from
book book1
left outer join
image images1_
on book1.id=images1_.book_id
order by
book1.id desc limit ? offset ?
return jpaQueryFactory
.select(book)
.from(book)
.leftJoin(book.images, image)
.orderBy(book.id.desc())
.offset((long)(pageNo-1) * pageSize)
.limit(pageSize)
.transform(
groupBy(book.id).list(
Projections.constructor(Book.class, book.id, book.title,
list(Projections.constructor(Image.class, image.id, book.id, image.filesize))
)
));
书籍和图像具有 1:N 的关系 我想在使用变换和投影时发送单个查询。 如果你编写如下查询,由于Leftjoin,会出现数据重复。这种情况我该怎么办?
使用投影和变换 必须用一条sql完成
我尝试了groupby或distinct。 但是,如果以这种方式删除重复项,则无法通过转换检索图像列表。
在处理查询中的一对多关系和分页时,您似乎遇到了一个常见问题。
SELECT
book1.id AS col_0_0_,
book1.title AS col_2_0_,
images1_.id AS col_5_0_,
images1_.filesize AS col_9_0_
FROM
book book1
LEFT OUTER JOIN (
SELECT
id,
book_id,
filesize,
ROW_NUMBER() OVER (PARTITION BY book_id ORDER BY id) AS row_num
FROM
image
) images1_ ON book1.id = images1_.book_id AND images1_.row_num = 1
ORDER BY
book1.id DESC
LIMIT ? OFFSET ?
现在,当您将这个修改后的查询与现有转换逻辑一起使用时,您应该获得带有分页的所需结果,并且不会因一对多关系而导致重复。