2013-11-17 4 views
1

У меня есть сложный оператор select в моем запросе, который я использую три раза, для внешних соединений. Я хотел бы, чтобы упростить его использовать сложный запрос один раз, но это не работает:Полное внешнее соединение с одной выбранной таблицей

select three.faculty, three.chair, one.students honors, 
    two.students normal, three.students bad 
from [complex select statement] one 
full outer join 
select * from (one) two 
on one.faculty=two.faculty and one.chair=two.chair and one.n=two.n 
full outer join 
select * from (one) three 
on two.chair=three.chair and two.faculty=three.faculty and two.n=three.n 

версия с использованием сложного запроса неоднократно работы:

select three.faculty, three.chair,one.students honors, 
    two.students normal, three.students bad 
from [complex select statement] one 
full outer join 
select * from [complex select statement] two 
on one.faculty=two.faculty and one.chair=two.chair and one.n=two.n 
full outer join 
select * from [complex select statement] three 
on two.chair=three.chair and two.faculty=three.faculty and two.n=three.n 
+0

как сделать его одним выбором с базы и другим выбором с первого –

ответ

0

Вы не можете присоединиться на подобный подзапрос. Вместо этого, вы должны использовать общее выражение таблицы, как это (с извинениями, что я не знаю синтаксис Oracle, точно):

WITH results AS (SELECT lots_of_things FROM lots_of_tables) 
SELECT * FROM results 
FULL OUTER JOIN results ON (...) 
FULL OUTER JOIN results ON (...) 

По существу, КТР означает, что ядро ​​базы данных будет предоставлять результаты из выражение как табличное значение, доступное для остальной части запроса (включая объединения и т. п.). Oracle предоставляет documentation on the WITH clause.

+0

Вот и все. Благодарю. Задача решена. –

+0

Рад помочь! :) – syrion

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