gpt4 book ai didi

java - 如何让 JooQ 联合两个具有相同列和数据类型的不同表?

转载 作者:行者123 更新时间:2023-11-30 05:48:23 27 4
gpt4 key购买 nike

我的数据库中有两个表,这些表具有完全相同的列和数据类型,但顺序不同。

表 A 包含列:A、B、C、D。

表 B 包含列:A、C、D、B。

我有一个应用程序,它使用 JooQ 查询数据库,并利用 Codegen 创建表和记录。但是,由于编译错误,它不允许我合并两个选择语句。我该怎么做才能合并两个表?

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

关于java - 如何让 JooQ 联合两个具有相同列和数据类型的不同表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54426826/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com