当前位置: 首页 > 知识库问答 >
问题:

如何让JooQ union有两个不同的表,它们具有相同的列和数据类型?

元玮
2023-03-14

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

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

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

我有一个使用JooQ查询数据库的应用程序,它利用Codigen来创建表格和记录。但是,由于编译错误,它不允许我合并两个选择语句。我能做什么,把两张桌子合并起来?

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

在union函数内部的变量上,它与SelectUnionStep中的类型不匹配有关。关于union(ARecord)不能应用于union(BRecord)。

我在JooQ的什么地方可以合并这两个表?

共有1个答案

蒋鸿文
2023-03-14

您需要的是jOOQ对SQL标准语法的支持UNION-correlative。据我所知,该语法目前没有在任何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();

当然,这里面已经没有类型安全了。如果您仍然希望接收ARecort类型,您可以编写

q1.union(q2).fetchInto(A);
 类似资料:
  • 我正在使用的数据库有许多具有相同列但(显然)具有不同表名的表(不是我设计的)。例如(这些是数据库表名): 有没有可能用JPA和Hibernate将这些映射到一个Java类实体?类的名称是,然后在使用它时传入例如,以便对象使用表? 还是只使用普通的、普通的Java对象来完成这样的任务更好? 谢谢你!

  • 根据逻辑,我需要实现两个,如果它们以相同的“相对”顺序具有相同的元素,则它们被认为是相等的。 举个例子,以下一对列表被认为彼此相等: 只要遵守相对顺序,就可以认为它们是平等的。 作为反例,这两个不相等: 导致 和 交换到位。 所以,基本上我发现这很有挑战性,因为这不是顺序完全重要的情况,也不是顺序完全不重要的情况。在这种情况下,我会使用普通的< code>list1.equals(list2)方法

  • 我用的是spring soap ws。 我有以下对应于复杂类型的JAXB域类 我有以下带有@XmlRegistry注释的类 以下是endpoint 当我发出 Soap 请求时,我正在使用 soap 请求中的终结点中给出NAMESPACE_URI。 在这里,在这种情况下,我得到以下回应 如果我使用"超文本传输协议://命名空间/url"作为NAMESPACE_URI在endpoint和肥皂请求我得到

  • 问题内容: 我有一张供用户使用的表。但是,当用户对其个人资料进行任何更改时,我会将它们存储在临时表中,直到我批准它们为止。然后将数据复制到活动表中,并从临时表中删除。 我想要实现的是,在管理面板中或用户可以在提交前仔细检查的页面中查看数据时,我想编写一个查询,该查询将允许我从两个表中获取ID为ID的表中的数据两者都等于$ userid。然后,我想以表格形式显示它们,其中旧值显示在左列中,而新值显示

  • 问题内容: 我有两个表(表A和表B)。 它们具有不同的列数-假设表A具有更多列。 如何合并这两个表,并为表B没有的列获取空值? 问题答案: 为具有较少列的表添加额外的列作为null

  • 问题内容: 我正在使用ajax加载数据并在DataTable中动态生成列名。我的数据表具有不同的列数,具体取决于用户的选择。(有一个下拉列表)。 例如,下拉列表中有2个选项,即“ 南部省” 和“ 北部省” 。 南部省 表有4列, 北部省 表有6列。 场景1 第一个用户选择具有4列的 Southern Province 。然后它生成的表没有错误,但是在此之后,如果用户选择具有6列的 Northern