您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

QueryDSL-如何加入子查询的并集

QueryDSL-如何加入子查询的并集

解决它。主要错误是我错过了on左联接中的子句,但是为了表达on条件,我在命名子查询时必须更加小心。该文档略微说明了构造访问子查询结果的路径,因此这里是示例。

联合中的第一个查询设置列名:

sqlSubQuery subQuery = new sqlSubQuery();
subQuery = subQuery.from(t).join(t.fk462bdfe3e03a52d4, QClient.client);
ListSubQuery clientByPaid = subQuery.list(t.id.as("id"), t.paidId.as("clientid"),
                                QClient.client.name.as("clientname"));

subQuery = new sqlSubQuery();
subQuery = subQuery.from(t).where(t.paidId.isNull(), t.clientname.isNotNull());
ListSubQuery clientByName = subQuery.list(t.id, Expressions.constant(-1L), 
                                  t.clientname);

现在,我需要构建一个路径表达式以引用回我的内部查询。我使用哪个类似乎并不重要,所以我选择了Void来强调这一点。

subQuery = new sqlSubQuery();
Path innerUnion = Expressions.path(Void.class, "innernamequery");
subQuery = subQuery.from(subQuery.union(clientByPaid,clientByName).as(innerUnion));

并进一步表达该on子句的路径表达。请注意,我加入list()了联合查询一个,并使用innerUnion前面定义的路径选择了每一列。

Path namequery = Expressions.path(Void.class, "namequery");
query = query.leftJoin(subQuery.list(
                Expressions.path(Long.class, innerUnion, "id"),
                Expressions.path(Long.class, innerUnion, "clientid"),
                Expressions.stringPath(innerUnion, "clientname")),
              namequery)
          .on(t.id.eq(Expressions.path(Long.class, namequery, "id")));
其他 2022/1/1 18:25:04 有607人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶