2013-02-26 2 views
0

У меня есть два запроса с профсоюзом следующим образом:оракул: присоединение подзапроса с внешним запросом

 select '00/00/0000' as payment_date , h1.customer_no 
    from payments h1 
    where not exists (select 1 from payments h2 where h2.customer_no = h1.customer_no and h2.ctype = 'CASH') 
    and h1.customer_no = 400 
    group by h1.customer_no 

    union 

    select to_char(h1.payment_date, 'MM/DD/YYYY') , h1.customer_no 
     from payments h1 inner join (select customer_no, max(payment_date) as max_date from payments where ctype = 'CASH' group by customer_no) subQ 
    on (h1.customer_no = subQ.customer_no 
      and h1.payment_date = subQ.max_date ) 
      and h1.customer_no = 400 
    group by h1.payment_date, h1.customer_no 

Теперь я хочу использовать этот союз в другом запросе.

select * from (

    select '00/00/0000' as payment_date , h1.customer_no 
    from payments h1 
    where not exists (select 1 from payments h2 where h2.customer_no = h1.customer_no and h2.ctype = 'CASH') 
    and h1.customer_no = p.customer_no 
    group by h1.customer_no 

    union 

    select to_char(h1.payment_date, 'MM/DD/YYYY') , h1.customer_no 
    from payments h1 inner join (select customer_no, max(payment_date) as max_date from payments where ctype = 'CASH' group by customer_no) subQ 
    on (h1.customer_no = subQ.customer_no 
    and h1.payment_date = subQ.max_date ) 
    and h1.customer_no = p.customer_no 
    group by h1.payment_date, h1.customer_no) sq, 

    payments p 
    where p.customer_no = 400 
    and sq.customer_no = p.customer_no 

, когда я запускаю это, я получаю ORA-00904: "P" "CUSTOMER_NO":. Недопустимый идентификатор. Мне нужно присоединиться к h1.customer_no внешним запросам customer_no.

Я видел несколько запросов с рангом, но я не мог понять это. Как присоединиться к внутреннему запросу с внешним запросом?

благодарит заранее.

ответ

0

У вашей таблицы платежей есть столбец customer_no? Кажется, это то, что указывает ваша ошибка.

Как присоединиться к подзапросам, вы можете посмотреть в factored subqueries. Вы можете:

WITH z AS (
    SELECT ... 
    UNION 
    SELECT ... 
), y AS (
    SELECT ... 
) 
SELECT ... 
FROM y 
JOIN z ON y.x = z.x 
JOIN some_other_table t ON z.a = t.a