jooq限制

hgb9j2n6  于 2021-07-03  发布在  Java
关注(0)|答案(0)|浏览(349)

我有两个具有1-n关系的表,即存储订单的表order和存储订单位置的表orderposition。
在连接两个表的同时从数据库获取数据时,我想限制订单的数量。当限制两个表的连接之后,这显然不起作用,因为一个订单可能会导致多个记录,这取决于订单的位置数。
这是我现在和jooq写的:

final Table<Record> alias = context.select().from(ORDER).limit(1).asTable();

    final Result<Record> result =
        context
            .select()
            .from(alias.join(ORDER_POSITION)
                .on(ORDER_POSITION.ORDER_ID.eq(alias.field(ORDER.ID))))
            .fetch();

这似乎并没有限制订单的数量,它返回我不止一个订单。另一方面,如果我用一个leftjoin替换连接,限制也会按预期工作(也适用于不同的限制参数)。我使用了一个h2db来测试查询(不确定它是否重要)。
我知道join和leftjoin的区别,但这两种情况下的限制是否应该按预期的那样起作用,还是我遗漏了什么?
这是jooq通过join生成的:

select 
  "alias_129458832"."ID", 
  "alias_129458832"."KEY", 
  ...
  "PUBLIC"."ORDER_POSITION"."ID", 
  "PUBLIC"."ORDER_POSITION"."ORDER_ID"
from (
  select 
    "PUBLIC"."ORDER"."ID", 
    "PUBLIC"."ORDER"."KEY", 
    ...
  from "PUBLIC"."ORDER"
  limit ?
) "alias_129458832"
  join "PUBLIC"."ORDER_POSITION"
    on "PUBLIC"."ORDER_POSITION"."ORDER_ID" = 
    "alias_129458832"."ID"

如果我用一个leftjoin替换查询,它会生成一个相同的查询,除非该连接被“leftouterjoin”替换。
我测试的内容
我用内存中的h2数据库运行测试。我有几个订单没有任何位置,一个订单有一个位置,一个订单有三个位置。
当连接限制为1时,我得到所有4条连接的记录(这意味着它同时返回两个订单),当限制为0时,我没有记录。顺序有一个随机键,它总是为每个测试随机生成的。如果我用这把钥匙

context.select().from(ORDER).orderBy(ORDER.KEY).limit(4).asTable();

限制为4,有时没有记录,有时一个记录(一个位置的顺序),有时三个记录(三个位置的顺序),有时全部四个记录(两个都是顺序)。
如前所述,如果我用leftjoin替换连接,我当然也得到了没有任何位置的顺序,但是这里用限制指定的顺序数总是正确的。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题