含有聚合函数的链接子查询

地藏王 发布于 2011/04/03 18:58
阅读 415
收藏 2

请教高手:

我现在有三张表 

ProjectTable表  :含有字段 projectId---项目表主键  userId--项目创建者         projectName--项目名称

RevisionTable表  :        revisionId--版本表主键      projectId --项目表主键    revisionSystem--系统维护版本号                               createTime --创建时间

UserTable表:               userId--用户表主键           userName  --用户姓名

我现在希望显示的是:项目名称 创建者 创建日期 和最高版本号

版本号是要最高的  项目名称不要重复 项目中如果没有用户和版本的显示空

高手指点下,谢谢

 

加载中
0
地藏王
地藏王

怎么没人帮下忙呢

0
jobell
jobell

select 

PT.projectName --项目名称

(select userName from UserTable where userId=PT.userId) as userName,--项目创建者

PT.createTime,--创建时间

(select max(revisionSystem) from RevisionTable where projectId=PT.projectId) 

from ProjectTable PT

0
地藏王
地藏王

引用来自#3楼“joliny”的帖子

 

select 

PT.projectName --项目名称

(select userName from UserTable where userId=PT.userId) as userName,--项目创建者

PT.createTime,--创建时间

(select max(revisionSystem) from RevisionTable where projectId=PT.projectId) 

from ProjectTable PT

 谢谢楼上的兄弟 不过创建时间是版本表中的 不是项目表中的

0
华宰
华宰

分三步查询

1. SELECT * FROM ProjectTable

2. SELECT revisionSystem,createTime FROM RevisionTable WHERE projectId=[projectId] ORDER BY createTime DESC LIMIT 1

2. SELECT userName FROM UserTable WHERE userId=[userId]

0
华宰
华宰

不要老想着一条SQL语句能解决所有问题,性能差点就差点啊,一次性搞太好,到时候没你啥事了,那你不就失业了吗?留点优化的余地吧

0
地藏王
地藏王

引用来自#6楼“华宰”的帖子

 

不要老想着一条SQL语句能解决所有问题,性能差点就差点啊,一次性搞太好,到时候没你啥事了,那你不就失业了吗?留点优化的余地吧

 大哥,我现在就是想要一条sql搞定啊,谢谢指点下,还有我是查询最高版本,不是按版本排序,一楼的写的不错,就是吧创建日期弄成项目表了

0
jobell
jobell

我晕,都写到这块了还弄不出来。。。。

select PT.projectName --项目名称
(select userName from UserTable where userId=PT.userId) as userName,--项目创建者

(select createTime from RevisionTable where projectId=PT.projectId and revisionSystem=maxrevision ) as createTime ,--创建时间

(select max(revisionSystem)as maxrevison from RevisionTable where projectId=PT.projectId) as maxrevision--最高版本号 

from ProjectTable PT

 

或者

select PT.projectName --项目名称
(select userName from UserTable where userId=PT.userId) as userName,--项目创建者

(select createTime from RevisionTable where projectId=PT.projectId and revisionSystem=(select max(revisionSystem)as maxrevison from RevisionTable where projectId=PT.projectId)) as createTime ,--创建时间

(select max(revisionSystem)as maxrevison from RevisionTable where projectId=PT.projectId) as maxrevision--最高版本号 

from ProjectTable PT

0
jobell
jobell

同样的也可以先select弄一张虚拟表,然后进行关联也可以。有点写view的意思了!!

0
地藏王
地藏王

引用来自#9楼“joliny”的帖子

 

同样的也可以先select弄一张虚拟表,然后进行关联也可以。有点写view的意思了!!

 谢谢,为什么查询时间的时候,后边的条件用重命名的名字提示错误呢?8楼或者之后是可以的,或者之前为什么提示标识符无效呢

(select createTime from RevisionTable where projectId=PT.projectId and revisionSystem=maxrevision ) as createTime

ORA-00904: "MAXREVISION": 标识符无效

0
jobell
jobell

引用来自#10楼“地藏王”的帖子

引用来自#9楼“joliny”的帖子

同样的也可以先select弄一张虚拟表,然后进行关联也可以。有点写view的意思了!!

 谢谢,为什么查询时间的时候,后边的条件用重命名的名字提示错误呢?8楼或者之后是可以的,或者之前为什么提示标识符无效呢

(select createTime from RevisionTable where projectId=PT.projectId and revisionSystem=maxrevision ) as createTime

ORA-00904: "MAXREVISION": 标识符无效

这一条我没有测试所以我写了第二条sql,因为maxrevision不是表中的字段。无法识别。如果写成一个虚拟表就可以识别了。

返回顶部
顶部