通过在SQL中连接三个表来创建视图

时间:2014-11-11 12:08:58

标签: sql oracle

我有三个表STUDENTS,SUBJECTS,RANK,数据为 -

1)STUDENTS [NAME(小学)]

NAME
--------
Alex
Greg

2)SUBJECTS [ID(小学)]:

ID
--------
100
101
102

3)RANK [SEQ(小学),NAMEIDRANK]

SEQ    NAME    ID     RANK
------ ------- ------ ------
1      Alex    100    A 
2      Greg    100    A 
3      Greg    101    B 

我想创建一个应该将数据显示为

的视图
NAME    ID     RANK
------- ------ ------
Alex    100    A
Alex    101    Z
Alex    102    Z
Greg    100    A
Greg    101    B
Greg    102    Z

因此,对于每个学生和每个主题,视图应显示RANK RANK表格中的NULL,否则将'Z'替换为{{1}}。

我是SQL的新手。因此,我们将非常感谢您对形成查询的任何帮助!

2 个答案:

答案 0 :(得分:1)

交叉加入studentsubject然后左外连接结果rank以获得所有(学生,科目)组合的排名。选择NVLCOALESCE列会将NULL替换为' z'。

SELECT st.name,
       su.id,
       NVL(ra.rank,'Z')           Rank, --COALESCE(ra.rank,'Z') Rank
FROM   student st
       CROSS JOIN subject su
       LEFT OUTER JOIN rank ra
                    ON ra.name = st.name
                       AND ra.id = su.id
ORDER  BY st.name,su.id 

注意:如果您不需要,可以从上述查询中删除ORDER BY。

fiddle

答案 1 :(得分:0)

SELECT r.NAME, r.ID, NVL(r.RANK, 'Z')
FROM RANK r, studendts st, SUBJECTS su
WHERE st. NAME = r. NAME
AND   su.ID = r.ID
ORDER BY 1,2,3
相关问题