2009-10-23 2 views
0

Мне нужно преобразовать свой запрос в классический синтаксис Oracle, потому что мне нужно поставить его в материализованное представление. Тем не менее, я не совсем уверен, как это сделать:Внешнее соединение в классическом синтаксисе Oracle join

SELECT * FROM transactions t 
LEFT JOIN transac_detail td1 ON (t.id = t1.trans_id AND t.ttype = 'VOICE') 
LEFT JOIN transac_detail td2 ON (t.id = t2.trans_id AND t.ttype = 'BROADBAND'); 

Я начал писать так:

SELECT * FROM transactions t, transac_detail td1, transac_detail td2 
WHERE t.id = t1.trans_id(+) AND t.id = t2.trans_id(+) 

Но как я могу включить «буквенные» условия?

+1

Мне кажется маловероятным, что материализованное представление не примет современную нотацию ISO. Вы уверены, что это необходимо? Это кажется очень неожиданным ограничением - это то, что было бы сделано только в том случае, если Oracle не намерена поддерживать материализованные взгляды в будущем. –

ответ

0

Исходный запрос смущен. вы имеете в виду это?

SELECT t.* FROM transactions t, transac_detail td1 
WHERE t.id = td1.trans_id(+) 
and t.ttype = 'VOICE' 
union 
SELECT t.* FROM transactions t, transac_detail td2 
WHERE t.id = td2.trans_id(+) 
and t.ttype = 'BROADBAND' 
+0

Исходный запрос имеет результаты транзакций и два набора transac_detail; у вас есть только один transac_detail - так что результат, конечно, не тот. Это может быть приемлемо, но я не уверен, что на этот вопрос должен быть задан вопрос. –

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