2016-06-13 115 views
0

虽然我不是高级SQL程序员,但我正在尝试编写SQL select,我需要将子查询放入连接条件以便从Actor表中获取数据。所以,我有选择:在连接条件中使用子查询进行SQL选择

SELECT JEI.account_number        AS JEI_accountNumber, 
    JE.branch_code           AS JE_branchCode, 
    JE.journal_entry_status        AS JEI_transStatus, 
    JEI.trans_amount          AS JEI_transAmount, 
    JEI.account_currency         AS JEI_accountCurrency, 
    JEI.other_account_number        AS JEI_otherAccountNumber, 
    JEI.other_bank_number         AS JEI_otherBankNumber, 
    nts_rep_cheque.getISOStringFromDate(JE.effective_date) AS JE_effectiveDate, 
    JE.multiple_trans_id         AS JE_multipleTransID, 
    A.user_logon_name          AS USER_ID, 
    A.di_teller_id           AS A_DITellerID, 
    nts_rep_cheque.getISOStringFromDate(JE.created_date) AS JE_createdDate, 
    JE.operation_id          AS JE_operationID, 
    JEI.nts_di_trans_number        AS JEI_transType 
FROM nts_journal_entry JE 
JOIN nts_journal_entry_item JEI 
ON JEI.company_code  = JE.company_code 
AND JEI.user_id   = JE.user_id 
AND JEI.journal_date  = JE.journal_date 
AND JEI.journal_entry_id = JE.journal_entry_id 
JOIN actor A 
ON A.ACCE_PROC_ID   = JE.COMPANY_CODE 
AND A.actor_id    = JE.actor_id 
WHERE JE.company_code  = '01' 

但是我想用从演员表中选择不同的行此选择:

(SELECT USER_ID 
    FROM 
     (SELECT USER_ID 
     FROM NTS_JOURNAL_ENTRY 
     WHERE MULTIPLE_TRANS_ID = JE.MULTIPLE_TRANS_ID 
     ORDER BY journal_entry_id 
    ) 
    WHERE rownum =1 
    ) 

我把它放在前面的选择替换:

AND A.actor_id = JE.actor_id 

AND A.actor_id = (SELECT USER_ID 
    FROM 
     (SELECT USER_ID 
     FROM NTS_JOURNAL_ENTRY 
     WHERE MULTIPLE_TRANS_ID = JE.MULTIPLE_TRANS_ID 
     ORDER BY journal_entry_id 
    ) 
    WHERE rownum =1 
    ) 

但是,它s eems,甲骨文有嵌套查询限制,所以我得到一个错误:ORA-00904: "JE"."MULTIPLE_TRANS_ID" invalid identifier.

有没有解决方案,如何解决该错误或任何方式如何重写查询以获得相同的结果?由于

回答

0

您可以使用FIRST_VALUE如果你想为这个MULTIPLE_TRANS_ID

AND A.actor_id = 
     (SELECT DISTINCT FIRST_VALUE(USER_ID) OVER (PARTITION BY MULTIPLE_TRANS_ID ORDER BY journal_entry_id) 
     FROM NTS_JOURNAL_ENTRY 
     WHERE MULTIPLE_TRANS_ID = JE.MULTIPLE_TRANS_ID 
    ) 

第一用户如果想在最后一个用户使用DESCLAST_VALUE

AND A.actor_id = 
     (SELECT DISTINCT FIRST_VALUE(USER_ID) OVER (PARTITION BY MULTIPLE_TRANS_ID ORDER BY journal_entry_id DESC) 
     FROM NTS_JOURNAL_ENTRY 
     WHERE MULTIPLE_TRANS_ID = JE.MULTIPLE_TRANS_ID 
    )