簡體   English   中英

通過映射第三個表查詢聯接兩個表,而無需從Oracle中的第三個表返回所有記錄

[英]Query to join two tables by mapping third table without returning all records from third table in Oracle

我有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表返回了我不需要的所有記錄。 我只需要數學和英語表中的記錄。 請幫我。

只需將FULL JOIN (完全外部FULL JOIN -在任何一個表中都有一行時返回記錄)更改為JOIN (內部JOIN -僅在兩個表中都存在該行時JOIN

您需要在表格MATHSENGLISH中至少有一個存在學生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

SQLFiddle演示

聯接表的第一個查詢順序很重要-這就是為什么輸出錯誤的原因。 有關連接的示例的更多信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM