问:将2个查询合并为1个

时间:2018-08-31 21:15:45

标签: sql oracle oracle11g

目前我有3张桌子:

  1. 用户表

    用户名|名|姓

  2. 课程表

    课程ID |课程名称|课程日期|课程说明

  3. 出勤表

    课程ID |用户名

用户表包含有关用户的信息。 课程表包含有关课程的信息。 有多个名称相同但日期不同的课程。 出勤表包含该课程用户的出勤情况。

我得到了用户名和课程名称的列表。我必须找到每个用户的名字和姓氏以及每个用户参加该课程的最新日期。

当前,我首先使用此查询来查找名字和姓氏。

Select firstname, lastname from user where username in (<user list>)

接下来,我循环浏览上一个查询的结果,并获取以下查询的第一个结果:

select date from attendance, course 
where attendance.course_id in (select course_id from course where course_name = <course>) 
and username = <username> and attendance.course_id = course.course_id 
order by course_date desc  

所有这些的结果是,对于n个用户,我必须运行n + 1个查询。我想将其简化为单个查询,有什么建议吗?

谢谢

2 个答案:

答案 0 :(得分:1)

这是我的解决方法

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true">

答案 1 :(得分:0)

这是我对问题的理解:

select u.firstname, 
       u.lastname, 
       max(c.course_date) max_course_date
from t_attendance a join t_course c on c.course_id = a.course_id
                    join t_user u on c.username = u.username
where a.username in ('user1', 'user2', ...)
  and c.course_name in ('course1', 'course2', ...) 
group by u.firstname, 
         u.lastname;

WHERE子句可能需要调整,具体取决于您获取用户名和课程名称列表的方式。