2013-10-07 4 views
1

Я хочу, чтобы псевдоним результатов одного запроса и использовать указанный псевдоним в другом. В качестве простого примера:Результаты запроса Oracle Alias ​​

(select a from foo) as fooResults; 

select b from bar 
    where b in fooResults; 

Этот синтаксис не работает, понятно. Есть ли способ сделать это с помощью ванильного Oracle SQL? Если для этого требуется PL/SQL, какой синтаксис? Все результаты поиска указывают на псевдонимы столбцов или таблиц.

EDIT: Один из движущих факторов заключается в том, что я хочу иметь возможность использовать fooResults в нескольких запросах позже, если это возможно.

+0

Вы пытались переместить запрос 'fooResults' на свой второй в предложении where? 'select b из bar где b in (выберите a из foo)' – Taryn

+0

Я это рассматривал, но не хочу, чтобы он был частью одного и того же запроса. В идеале, я смогу ссылаться на запрос с псевдонимом из нескольких других запросов, не переписывая его. – Travis

ответ

4

Есть несколько вариантов. Чистейший, если вы хотите сохранить псевдоним, вероятно, использовать предложение WITH

WITH fooResults 
    AS(SELECT a 
     FROM foo) 
SELECT b 
    FROM bar 
WHERE b IN (SELECT a 
       FROM fooResults) 

Если вы хотите использовать выражение в нескольких запросов, вы реально хотите определить fooResults как вид.

ли fooResults вид, вид в инлайн или подзапрос определен в пункте WITH, хотя, вы должны будете SELECT от него в вашей статье IN. Вы не можете сделать WHERE b IN fooResults независимо от того, как определяется fooResults.

+0

Это очень полезно, спасибо. Есть ли у вас какие-либо предложения, которые сделают fooResults пригодными для нескольких запросов, или мне нужно будет определить его как процедуру? – Travis

+0

Кроме того, есть ли способ, который я могу просто сказать «где b в fooResults», без необходимости определять мини-подзапрос? – Travis

+0

@Travis - Обновлен мой ответ. –

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