我有3张桌子学生,STUDENT_GPA,STUDENT_ATTENDANCE如下所示
STUDENT
--------
STUDENT_ID STUDENT_NAME
-----------------------
1 A
2 B
3 C
4 D
5 E
SUBJECTS
--------
STUDENT_ID GPA UPDATE_FLG
---------------------------
2 8 Y
4 7 Y
5 8 N
STUDENT_ATTENDANCE
------------------
STUDENT_ID ATTENDANCE UPDATE_FLG
----------------------------------
3 92 Y
Output should be
STUDENT_ID STUDENT_NAME GPA ATTENDANCE
--------------------------------------
2 B 8 NULL
3 C NULL 92
4 D 7 NULL
我尝试了下面的查询,但是它不能正常工作。它缺少任何一个表中的行。
SELECT S.STUDENT_ID,
S.STUDENT_NAME,
SD.GPA,
SA.ATTENDANCE
FROM STUDENT S
LEFT OUTER JOIN STUDENT_GPA SD ON (S.STUDENT_ID=SD.STUDENT_ID
AND SD.UPDATE_FLG='Y')
LEFT OUTER JOIN STUDENT_ATTENDANCE SA ON (S.STUDENT_ID=SA.STUDENT_ID
AND SA.UPDATE_FLG='Y')
请帮帮我!谢谢
发布于 2016-07-27 22:18:28
虽然,从你的问题中并不十分清楚,你需要什么结果集,然而,看起来你想为那些GPA被更新或其出勤率被更新的学生选择数据,而你想忽略所有其他记录。
基于这种理解,下面的查询为您提供了预期的结果集。
SELECT S.STUDENT_ID, S.STUDENT_NAME, SD.GPA, SA.ATTENDANCE
FROM STUDENT S LEFT OUTER JOIN STUDENT_GPA SD ON
(S.STUDENT_ID=SD.STUDENT_ID)
LEFT OUTER JOIN STUDENT_ATTENDANCE SA ON (S.STUDENT_ID=SA.STUDENT_ID)
WHERE SA.UPDATE_FLG = 'Y' OR SD.UPDATE_FLG = 'Y'
发布于 2016-07-27 21:54:02
SELECT S.STUDENT_ID,
S.STUDENT_NAME,
SD.GPA,
SA.ATTENDANCE
FROM STUDENT S
LEFT OUTER JOIN STUDENT_GPA SD ON (S.STUDENT_ID=SD.STUDENT_ID
AND SD.UPDATE_FLG='Y')
LEFT OUTER JOIN STUDENT_ATTENDANCE SA ON (S.STUDENT_ID=SA.STUDENT_ID
AND SA.UPDATE_FLG='Y')
UNION
SELECT S.STUDENT_ID,
S.STUDENT_NAME,
SD.GPA,
SA.ATTENDANCE
FROM STUDENT S
RIGHT OUTER JOIN STUDENT_GPA SD ON (S.STUDENT_ID=SD.STUDENT_ID
AND SD.UPDATE_FLG='Y')
RIGHT OUTER JOIN STUDENT_ATTENDANCE SA ON (S.STUDENT_ID=SA.STUDENT_ID
AND SA.UPDATE_FLG='Y')
发布于 2016-07-27 22:01:51
这里有一个使用conditional aggregation
的选项
select *
from (
select s.student_id, s.student_name,
max(case when sub.update_flag = 'Y' then sub.gpa end) gpa,
max(case when att.update_flag = 'Y' then att.attendance end) attendance
from student s
left join subjects sub on s.student_id = sub.student_id
left join student_attendance att on s.student_id = att.student_id
group by s.student_id, s.student_name
) t
where gpa is not null or attendance is not null
https://stackoverflow.com/questions/38623632
复制相似问题