我有3张桌子:
表Maths
:
ID Marks1
(1 , 80)
表English
:
ID Marks2
(2 , 85)
表Student
:
ID Name
(1 , Raj)
(2 , Sam)
(3 , John)
我需要一个SQL查询(Oracle)来获得以下输出:
ID Name Marks1 Marks2
(1 , Raj , 80 , (null))
(2 , Sam , (null) , 85)
我写的一些查询:
select B.ID, B.Name, A.Marks1, C.Marks2 from
(select ID, Marks1 from Maths) A
full join Student B on B.ID=A.ID
left join (select ID, Marks2 from English) C
on C.ID=B.ID
但是这个查询会返回Student表中我不需要的所有记录。 我只需要数学和英语表格的记录。 请帮帮我。
答案 0 :(得分:0)
只需将FULL JOIN
(完全外部联接 - 在任一表中有行时返回记录)更改为JOIN
(内部联接 - 只有在两个表中存在行时才加入)
答案 1 :(得分:0)
您需要行,其中学生的ID至少存在于MATHS
,ENGLISH
个表中。这些查询提供了您想要的输出:
select id, s.name, m.Marks1, e.Marks2
from maths m
full join english e using (id)
join student s using (id);
...或:
select s.id, s.name, m.Marks1, e.Marks2
from student s
left join english e on e.id=s.id
left join maths m on m.id = s.id
where e.id is not null or m.id is not null
在第一个查询连接表的顺序很重要 - 这就是输出不正确的原因。关于联接的更多informations with examples。