【问题标题】:Build Left Join Query with JOOQ using two Tables from two Different Databases使用来自两个不同数据库的两个表使用 JOOQ 构建左连接查询
【发布时间】:2017-10-17 05:17:49
【问题描述】:

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

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

示例原生 SQL 查询(如下),我们需要使用 JOOQ 框架构建此查询,而不是使用原生 sql。到目前为止我还没有找到任何解决方案,也许 JOOQ 不支持此功能

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

【问题讨论】:

    标签: java mysql sql join jooq


    【解决方案1】:

    代码生成器配置

    如果您想使用两个不同的数据库/架构,则需要相应地配置代码生成器。您可以指定多个输入模式as documented here

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

    替代方案:

    • 您可以放弃 &lt;inputSchema/&gt; 配置,jOOQ 的代码生成器将简单地生成所有可用的模式。
    • 您可以配置多个独立的代码生成,每个架构一个。这意味着您的架构没有相互共享的链接元数据(例如外键)。

    查询

    jOOQ manual recommends referencing tables from a global generated Tables class。这适用于单模式设置。当查询多个模式时,可能值得从生成的模式实例中引用表。以下是编写查询的方法:

    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();
    

    【讨论】:

    • 感谢 Lukas,您的解决方案有效,它解决了我的问题
    猜你喜欢
    • 2021-01-12
    • 1970-01-01
    • 2012-10-23
    • 2014-09-25
    • 1970-01-01
    • 1970-01-01
    • 2014-10-05
    • 1970-01-01
    相关资源
    最近更新 更多