当前位置: 首页 > 知识库问答 >
问题:

如何连接3个表并使用jooq迭代结果?

孔运良
2023-03-14

我有课程,学生,时间表表。

table course(id, name, ....), 
table student(id, name, ...), 
table schedule(id, c_id, s_id).

现在,我想将时间表表与课程表和学生表左连接。

在jooq中连接这3个表的最佳方法是什么?我假设它是这样的:

TableLike<?> firstjoin = sql
    .select()
    .from(Tables.SCHEUDLE)
    .leftOuterJoin(Tables.COURSE)
    .on(Tables.SCHEDULE.CID.eq(Tables.COURSE.ID))
    .asTable();

Result<?> result = sql
    .select()
    .from(firstjoin)
    .leftOuterJoin(Tables.STUDENT)
    .on(Tables.SCHEDULE.SID.eq(Tables.STUDENT.ID))
    .fetch();

当我得到结果时,将结果分为学生对象和课程对象的最佳方式是什么?我的意思是,既然类型是Result?,我们有什么方法可以将结果映射到学生、课程实体中,而不是繁琐地做这样的事情:

for(Record r: result){
   Student s = new Student(r.filed(), r.filed()...);
   Course c = new Course(r.filed(), r.filed()....)
}

共有1个答案

帅煌
2023-03-14

在jooq中连接这3个表的最佳方式是什么?我想这就像[…]

虽然您的查询是正确的,但我不会像您那样加入。您的方法创建了一个派生表,它

  1. 为没有值的SQL语句增加复杂性,例如在维护语句时
  2. 防止在某些处理派生表不佳的数据库中进行优化

相反,只需在一条语句中连接两个表:

java prettyprint-override">Result<?> result = sql
    .select()
    .from(SCHEUDLE)
    .leftOuterJoin(COURSE)
    .on(SCHEDULE.CID.eq(COURSE.ID))
    .leftOuterJoin(STUDENT)
    .on(SCHEDULE.SID.eq(STUDENT.ID))
    .fetch();

您可以使用各种记录中的一种。into()方法,例如记录。into(表)

for (Record r : result) {
    StudentRecord s = r.into(STUDENT);
    CourseRecord c = r.into(COURSE);
}
 类似资料:
  • 我的数据库中有一个小特例,我需要从两个具有一对一关系的不同表中获取数据,以获得有用的结果。获取看起来像这样: 当然,我在实际代码中使用了-这只是一个示例。我的问题是是否以及如何将jOOQ中获取的数据写入POJO。我不确定是否有办法让jOOQ为我生成这个POJO,但如果我必须自己编写它,我假设我需要像适配器这样的东西以及像作为数据类型的转换器。 我看到有可能出现RecordMapperProvide

  • 我看到的mysql表如下所示: 用户信息 id |用户id |电话号码|信息|方向|创建于 用户 id |名称 我想'组由'user_messages两次和UNION的结果。我为什么要这么做?因为user_id有时有一个有效的用户ID(不是'-1'),所以我按它分组,如果它有-1,则按phone_number分组。 我也想左加入结果与用户表以获得用户名的情况下user_id设置为一个有效的用户 我

  • 我有一个应用程序正在从jooq切换到jdbc,我使用jdbc创建了一个表,但我需要编辑一些jooq查询来加入它,问题是自动生成的jooq tables类无法识别它,所以有没有办法通过字符串名引用表? 下面是一些示例代码: 我如何在此处加入“连接”表?没有桌子。连接,因为它是以不同的方式创建的。 有很多疑问,所以我们希望根据需要逐步进行转换。 更新:我尝试添加以下内容,并且查询运行,但是我尝试获取的

  • 使用JSF 2.0,我需要显示一个表,其中每一行都包含一个打开弹出窗口的链接。我有两种型号:

  • 我有两个双数组: 我的循环结构如下所示: 我要做的是连续获取项目LatArr[0]和LonArr[0]<这样我就可以在lat1中使用LatArr[0],在lon1中使用LonArr[0]。此外,LatArr[1]应位于lat2,LonArr[1]应位于lon2 但此代码获取LatArr[0]。。[1] 。。和LonArr[0]。。[1] 。。两次每个元素打印两次 任何人都请纠正我的错误,我完全不希

  • 我试图迭代一个ArrayList并使用规则中的jboss drools添加到另一个ArrayList。 我的规则如下。 用口水怎么做?