簡體   English   中英

我怎樣才能讓 JooQ 聯合兩個不同的表,它們具有相同的列和數據類型?

[英]How can I have JooQ union two different tables, that have the same columns and datatypes?

我的數據庫中有兩個表,這些表具有完全相同的列和數據類型,但順序不同。

表 A 有列:A、B、C、D。

表 B 有列:A、C、D、B。

我有一個使用 JooQ 查詢數據庫的應用程序,它使用 Codegen 創建表和記錄。 但是,由於編譯錯誤,它不允許我合並我的兩個 select 語句。 我能做些什么來聯合這兩個表?

StepWhereSelect<ARecord> query = dsl.selectFrom(A);
StepWhereSelect<BRecord> query2 = dsl.selectFrom(B);
query.union(query2)

在 union 函數內部的變量上,它包含 SelectUnionStep 中關於 union(ARecord) 不能應用於 union(BRecord) 的類型不匹配。

我在哪里可以在 JooQ 中合並這兩個表?

您正在尋找的是 jOOQ 對 SQL 標准語法UNION CORRESPONDING 該語法目前沒有在我所知道的任何 RDBMS 中實現,但它可以很容易地被 jOOQ 模擬。 在沒有這種語法支持的情況下,您可以使用以下代碼在兩個子查詢中創建正確的列順序:

var q1 = dsl.select(Stream.of(A.fields()).sorted(Field::getName).collect(toList()))
            .from(A);
var q2 = dsl.select(Stream.of(B.fields()).sorted(Field::getName).collect(toList()))
            .from(A);
q1.union(q2).fetch();

當然,這里不再有類型安全了。 如果你還想接收ARecord類型,你可以寫

q1.union(q2).fetchInto(A);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM