我的數(shù)據(jù)庫中有兩個(gè)表,這些表具有完全相同的列和數(shù)據(jù)類型,但順序不同。表 A 包含以下列:A、B、C、D。表 B 包含以下列:A、C、D、B。我有一個(gè)使用 JooQ 查詢數(shù)據(jù)庫的應(yīng)用程序,它使用 Codegen 創(chuàng)建表和記錄。但是,由于編譯錯(cuò)誤,它不允許我合并兩個(gè) select 語句。我能做些什么來合并這兩個(gè)表?StepWhereSelect<ARecord> query = dsl.selectFrom(A);StepWhereSelect<BRecord> query2 = dsl.selectFrom(B);query.union(query2)在聯(lián)合函數(shù)內(nèi)部的變量上,它涉及到 SelectUnionStep 中關(guān)于聯(lián)合(ARecord)不能應(yīng)用于聯(lián)合(BRecord)的類型不匹配。我在 JooQ 哪里可以合并這兩張表?
1 回答

叮當(dāng)貓咪
TA貢獻(xiàn)1776條經(jīng)驗(yàn) 獲得超12個(gè)贊
您正在尋找的是 jOOQ 對(duì) SQL 標(biāo)準(zhǔn)語法的支持UNION CORRESPONDING。我所知道的任何 RDBMS 目前都沒有實(shí)現(xiàn)該語法,但它可以很容易地被 jOOQ 模擬。在沒有此語法支持的情況下,您可以使用以下代碼在兩個(gè)子查詢中創(chuàng)建正確的列順序:
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();
當(dāng)然,這不再是類型安全了。如果你仍然想接收ARecord類型,你可以寫
q1.union(q2).fetchInto(A);
添加回答
舉報(bào)
0/150
提交
取消