簡體   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