查看: 2744|回复: 3

大大,求问数据中心-查询,可否进行联表查询?

升级   29.33%

4

主题

10

回帖

94

积分

注册会员

Rank: 2

积分
94
发表于 2023-1-20 19:21:37 | 显示全部楼层 |阅读模式
本帖最后由 realcjames 于 2023-1-20 19:27 编辑

三张表,项目表project,项目工时表projectTime,项目报销表projectPayment;
后两张表通过projectId与项目表关联。
需求是:联表查询出项目的总计工时和总计报销。

但是我写sql,比如
[SQL] 纯文本查看 复制代码
select sum(t.time), t.projectId from project p left join projectTime t group by p.projectId

在left这里就报错了

如果不用join,比如
[SQL] 纯文本查看 复制代码
select sum(t.time), t.projectId from project p, projectTime t where p.projectId = t.projectId group by p.projectId

倒是不会报错,也能查出来,但如果projectTime表里没有对应的工时数据,就查不出结果,因为似乎做不到像join那样的功能?

所以,我想请教下,我的这个需求怎么解决:
1. 是我join的写法不对?
2. 还是JPQL不支持join?
3. 或是我的第二种写法,可以做到类似join的功能,即使工时表中没数据,也能以项目表为准,查出所有项目?
4. 或者有没有其他的方法?
感谢!

回复

使用道具 举报

Ray

升级   100%

31

主题

203

回帖

865

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
865
发表于 2023-1-28 11:10:49 | 显示全部楼层
默认情况下由于jpa需要先知道类的存在才能做映射,并不是jpa不支持join,而是我们在设计之初为了实现分库分表的设计给每个类都单独建立了一个上下文根,导致了无法join,实际上在单数据库情况下是可以使用join的,仅在分库分表情况下无法join,我们正在改进这部分设计,计划将区分jpql和原生sql的执行,这样如果需要join,可以使用原生sql,预计在下一个发布版本中完成这个改动.
回复

使用道具 举报

升级   29.33%

4

主题

10

回帖

94

积分

注册会员

Rank: 2

积分
94
发表于 2023-1-29 09:41:09 | 显示全部楼层
Ray 发表于 2023-1-28 11:10
默认情况下由于jpa需要先知道类的存在才能做映射,并不是jpa不支持join,而是我们在设计之初为了实现分库分表 ...

好的好的,感谢回复,那我先分成两个查询来做吧
回复

使用道具 举报

升级   100%

138

主题

1万

回帖

3万

积分

超级版主

Rank: 8Rank: 8

积分
37249
发表于 2023-1-29 09:49:03 | 显示全部楼层
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

联系客服 关注微信 下载APP 返回顶部 返回列表
viewthread