繁体   English   中英

使用来自两个不同数据库的两个表与JOOQ建立左联接查询

[英]Build Left Join Query with JOOQ using two Tables from two Different Databases

我们正在使用JOOQ执行所有查询。

现在我们需要使用JOOQ创建左联接查询,这将使来自两个不同数据库的两个表左联接

示例本机SQL查询(贝洛),我们需要使用JOOQ框架而不是本机sql来构建此查询。 到目前为止,我还没有找到任何解决方案,JOOQ可能不支持此功能

SELECT * 
FROM `library`.`books` 
LEFT JOIN `library2`.`author2` ON `library`.`books`.`author_id` = `library2`.`author2`.`id`

代码生成器配置

如果要使用两个不同的数据库/架构,则需要相应地配置代码生成器。 您可以指定一些输入模式,如此处记录

<configuration>
  <generator>
    <database>
      <schemata>
        <schema>
          <inputSchema>library</inputSchema>
        </schema>
        <schema>
          <inputSchema>library2</inputSchema>
        </schema>
      </schemata>
    </database>
  </generator>
</configuration>

备择方案:

  • 您可以省去<inputSchema/> inputSchema <inputSchema/>配置,而jOOQ的代码生成器将只生成所有可用的模式。
  • 您可以配置多个独立的代码生成,每个架构一个。 这意味着您的架构没有彼此共享的链接元数据(例如,外键)。

询问

jOOQ手册建议从全局生成的Tables类引用表 这对于单模式设置非常有效。 查询多个模式时,可能值得参考所生成的模式实例中的表。 这是编写查询的方法:

import static com.example.generated.library .Library .LIBRARY ;
import static com.example.generated.library2.Library2.LIBRARY2;
//                                  ^^^^^^^^ ^^^^^^^^ ^^^^^^^^
//                                     |        |        |
// Package per schema -----------------+        |        |
// Schema class       --------------------------+        |
// Schema instance    -----------------------------------+

接着:

DSL.using(configuration)
   .select()
   .from(LIBRARY.BOOKS)
   .leftJoin(LIBRARY2.AUTHOR2)
   .on(LIBRARY.BOOKS.AUTHOR_ID.eq(LIBRARY2.AUTHOR2.ID))
   .fetch();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM