我是 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/