gpt4 book ai didi

java - 正确的 JOOQ 类与 DSLConext 创建和迭代结果一起使用

转载 作者:太空宇宙 更新时间:2023-11-04 15:00:20 24 4
gpt4 key购买 nike

我是 JOOQ 的“新手”。

我在教程或 pdf 文档中找不到有关在使用 DSLContext 的 select 语句时使用几个类中的哪一个的详细信息。

select 的语法不正确,因为我相信 where 子句包含对 ifd 表的引用,该引用不在 from 中,也不在 join 中。我不确定如何实现正确的语法。

任何文档来源以及我做错了什么的指示都将受到赞赏。

Descriptor d = DESCRIPTOR.as("d");
Desclink dl = DESCLINK.as("dl");
Ifdesc ifd = IFDESC.as("ifd");
//
Result<Record2<Integer, Integer>> result =
dslContext.select(d.NETWORKID, dl.PARENT)
.from(d)
.join(dl).on(dl.PARENT.equal(d.DESCID))
.where(ifd.DESCID.equal(dl.CHILD))
.fetch()
;
for (Record2 r2 : result) {
Integer n = r2.getValue( d.NETWORKID);
Integer p = r2.getValue(dl.PARENT);
logger.println("nwid : " + n + " p " + p );
}

最佳答案

我认为您所缺少的只是另一个加入:

dslContext.select(ifd.IPADDRESS, d.NETWORKID, dl.PARENT)
.from(d)
.join(dl).on(dl.PARENT.equal(d.DESCID))
.join(ifd).on(dl.CHILD.equal(ifd.DESCID)) // another join here
.fetch();

请注意,您可以连接任意数量的表以形成您自己的“表表达式”,以放入 SQL 中的 FROM 子句中。如果连接三个表:

A join B on ... 
join C on ...

你真正在做的是(伪SQL):

T  := A' join C on ...
A' := A join B on ...

因此,阅读上述“三重连接”的最佳方式是:

SELECT ...
FROM ((A join B on ...) join C on ...)

当使用 Table.join() 时,jOOQ API 还支持原生嵌套此类 JOIN 表达式。 。例如:

          ( A.join(B).on(...) ).join(C).on(...)
// A' --> ^^^^^^^^^^^^^^^^^^^^^
// T --> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

SelectJoinStep.join()您使用的方法只是为了方便上述Table.join()

This might be an interesting read for you ,解释 SQL 中的 1-2 个语法内容。

关于java - 正确的 JOOQ 类与 DSLConext 创建和迭代结果一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22645028/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com