2015-09-07 4 views
-1

Я пытаюсь присоединиться к нескольким полям из вспомогательного запроса в main и хочу знать, как записать это соединение, чтобы избежать повторного определения моей основной таблицы в подзапросе.SQL явный синтаксис sub query join

Мне нужно ограничить результаты подзапроса на основании того, является ли это держателем или условием (aXM.ATTRIB_03), поэтому я попытался присоединиться к суб-запросу. План состоит в том, чтобы агрегировать условия, основанные на том, что возвращается в условии sub, см. Предлагаемый вывод.

Хотя это не показано в фрагменте кода, также важно, чтобы я возвращал несколько результатов в каждом подзапросе.

Я пытался с помощью следующего запроса, то этот вопрос в том, что суб-запрос не знает о псевдониме «Ass»

(ORA-00904: «АСС» «ROW_ID»:. Недопустимый идентификатор)

SELECT 
    Ass.NAME AS REGISTER_NAME, 
    Ass.ASSET_NUM AS SMSF_NUM, 
    HOLDER.SMSF_HOLDER_TYPE, 
    CONDITION.xCONDITION 

FROM 
    siebel.s_asset Ass 

    LEFT JOIN 
    (
    SELECT aXM.par_row_id AS hCon, aXM.ATTRIB_44 AS SMSF_HOLDER_TYPE 
    FROM Siebel.S_ASSET_XM aXM 
    WHERE Ass.row_id = aXM.par_row_id 
     AND aXM.ATTRIB_03 IS NULL 
) HOLDER 
    ON Ass.row_id = HOLDER.hCon 

    LEFT JOIN 
    (
    SELECT aXM.par_row_id AS cCon, aXM.ATTRIB_44 AS xCONDITION 
    FROM Siebel.S_ASSET_XM aXM 
    WHERE Ass.row_id = aXM.par_row_id 
     AND aXM.ATTRIB_03 = 'Condition' 
) CONDITION 
    ON Ass.row_id = CONDITION.cCon 

WHERE 
    AND Ass.NAME = 'SMSF Auditor' 
    AND Ass.STATUS_CD = 'Registered' 

Желаемая Выход

REGISTER_NAME SMSF_NUM SMSF_HOLDER_TYPE  SMSF_CONDITION 
SMSF Auditor 100259612 Individual Auditor  Condition 1~ Condition 2~ Condition 3 
SMSF Auditor 100259747 Individual Auditor  Condition 1~ Condition 2~ Condition 3 
SMSF Auditor 100259907 Individual Auditor  Condition 1~ Condition 2~ Condition 3 
+0

Вашего кода крайне запутанные. Просьба описать вашу фактическую задачу, предоставить некоторые примеры данных и желаемый результат. –

+0

Прошу прощения, этот фрагмент кода является частью более сложного запроса, я старался как можно лучше упростить. Я буду продолжать обновлять базу отзывов людей, чтобы помочь людям понять, что я прошу. –

+0

Вы не указали данные образца. Таким образом, у нас нет ничего, чтобы работать, чтобы создать ваш выход желания. –

ответ

0

Y ou не может использовать псевдоним ASS во внутреннем запросе.

Попробуйте это. Похоже на то же самое.

SELECT 
    Ass.NAME AS REGISTER_NAME, 
    Ass.ASSET_NUM AS SMSF_NUM, 
    CASE 
    WHEN aXM.ATTRIB_44 IS NULL THEN NULL 
    END AS SMSF_HOLDER_TYPE, 
    CASE 
    WHEN aXM.ATTRIB_44 IS NULL THEN NULL 
    ELSE aXM.ATTRIB_44 
    END AS xCONDITION 
FROM 
    siebel.s_asset Ass 
    LEFT JOIN Siebel.S_ASSET_XM aXM 
    on Ass.row_id = aXM.par_row_id 
WHERE 
     Ass.NAME = 'SMSF Auditor' 
    AND Ass.STATUS_CD = 'Registered' 
    AND (aXM.ATTRIB_03 IS NULL OR aXM.ATTRIB_03 = 'Condition') 
+0

Да, это работает, проблема в том, что мне нужно ограничить результаты при присоединении к Siebel.S_ASSET_XM aXM по разным причинам. Например, . S_ASSET_XM содержит условия и результаты компетентности. Я хочу, чтобы 1 подзапрос возвращал только условия и другой, который возвращает результаты компетенции –

+0

Ну, тогда вы должны включить это в свой вопрос. Извините, я могу решить только тот вопрос, который я вижу. –

+0

Справа я обновил код –

0

Вы можете переписать что-то вроде этого запроса

SELECT 
    Ass.NAME AS REGISTER_NAME, 
    Ass.ASSET_NUM AS SMSF_NUM, 
    HOLDER.SMSF_HOLDER_TYPE 

FROM 
    siebel.s_asset Ass 
    left join Siebel.S_ASSET_XM HOLDER on Ass.Ass.row_id = HOLDER.par_row_id 
    inner join Siebel.S_ASSET_XM aXM ON Ass.row_id = aXM.par_row_id