查询通过映射第三个 table 来连接两个 table,而不返回 Oracle 中第三个 table 的所有记录
Query to join two tables by mapping third table without returning all records from third table in Oracle
我有 3 个 table:
Table Maths
:
ID Marks1
(1 , 80)
Table English
:
ID Marks2
(2 , 85)
Table 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
但是这个查询 returns 来自 Student table 的所有记录,我不需要。
我只需要数学和英语 tables 的记录。
请帮我解决这个问题。
只需将您的 FULL JOIN
(完全外部联接 - returns 记录当 table 中有行时)更改为 JOIN
(内部联接 - 仅联接当行同时存在于 tables)
您需要行,其中至少一个表 MATHS
、ENGLISH
中存在学生 ID。这些查询提供了您想要的输出:
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 关于联接的信息。
我有 3 个 table:
Table Maths
:
ID Marks1
(1 , 80)
Table English
:
ID Marks2
(2 , 85)
Table 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
但是这个查询 returns 来自 Student table 的所有记录,我不需要。 我只需要数学和英语 tables 的记录。 请帮我解决这个问题。
只需将您的 FULL JOIN
(完全外部联接 - returns 记录当 table 中有行时)更改为 JOIN
(内部联接 - 仅联接当行同时存在于 tables)
您需要行,其中至少一个表 MATHS
、ENGLISH
中存在学生 ID。这些查询提供了您想要的输出:
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 关于联接的信息。