亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何讓 JooQ 聯合兩個具有相同列和數據類型的不同表?

如何讓 JooQ 聯合兩個具有相同列和數據類型的不同表?

慕勒3428872 2022-05-25 16:18:50
我的數據庫中有兩個表,這些表具有完全相同的列和數據類型,但順序不同。表 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)在聯合函數內部的變量上,它涉及到 SelectUnionStep 中關于聯合(ARecord)不能應用于聯合(BRecord)的類型不匹配。我在 JooQ 哪里可以合并這兩張表?
查看完整描述

1 回答

?
叮當貓咪

TA貢獻1776條經驗 獲得超12個贊

您正在尋找的是 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);


查看完整回答
反對 回復 2022-05-25
  • 1 回答
  • 0 關注
  • 196 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號