2015-06-08 2 views
1

У меня есть 3 таблицы:запрос, чтобы объединить две таблицы путем сопоставления третьей таблицы без возврата всех записей из третьей таблицы в Oracle

Таблица 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 

Но этот запрос возвращает все записи из студенческой стола, который я не» нужно. Мне нужны только записи из Maths и английских таблиц. Пожалуйста, помогите мне в этом.

ответ

0

Вам нужны строки, где Идентификатор студента присутствует, по крайней мере, в одной из таблиц 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 

SQLFiddle demo

В первом порядке запроса о соединении таблиц важно - именно поэтому вы получили неправильный выход , Подробнее informations with examples о присоединениях.

+0

спасибо. –

+0

Как присоединиться к другой таблице измерений, используя предложение «using». Например, у меня есть другая таблица Grade с столбцами grade_id, имя_события. рассмотрите столбец grade_id, включенный в таблицы на английском языке и Maths. Теперь я хочу получить имя класса в моем результирующем наборе. как я могу это сделать, пожалуйста, помогите. –

+0

Я думаю, что вам нужно присоединиться к этой дополнительной таблице с левым соединением ** дважды **, поэтому добавьте эту строку: 'left join grade g1 на g1.grade_id = m.grade_id', и эта строка:' left join grade g2 on g2 .grade_id = e.grade_id'. См. Прикрепленный файл [SQLFiddle] (http://sqlfiddle.com/#!4/a2ea1/1) для получения полного нового запроса. –

0

Просто измените FULL JOIN (полную внешнее соединение - возвращает запись, когда есть строка в любой таблице) к JOIN (внутреннему соединению - только присоединиться, когда строка существует в обеих таблицах)

+0

Большое спасибо –

Смежные вопросы