I wrote a query using with statement and union all. But, I am not used to writing complex queries. It keeps breaking in the union all. Please point me where it is wrong?
WITH t1 (source, target) AS ( SELECT t1.study_name, t1.site_id FROM iv_p_mv UNION ALL SELECT t2.study_name, t2.site_id FROM iv_p_mv as t2 left outer join t1 on t1.study_name = t2.study_name ) SELECT study_name, site_id FROM t1
Error:
Reference t1 is not found.
Advertisement
Answer
Just out of curiosity. Is this what you need?
WITH source AS (
    SELECT t1.study_name, t1.site_id 
    FROM iv_p_mv t1),
    target as (
    SELECT t2.study_name, t2.site_id
    FROM iv_p_mv t2 LEFT OUTER JOIN source s ON s.study_name = t2.study_name
    union all 
    SELECT s.study_name, s.site_id
    FROM source s)   
SELECT
    study_name,
    site_id
FROM target;
@KSp *I can see that you accepted this aswer, but if you want a recursive query, it should look more like (see answer and comments from @mathguy)
WITH t1 (source, target) AS (
    SELECT study_name   source,
           site_id      target
    FROM iv_p_mv
    UNION ALL
    SELECT t2.study_name,
           t2.site_id
    FROM iv_p_mv t2, t1
    WHERE t1.source = t2.study_name (+)
)
SELECT source, target FROM t1