select decode( select * from (select s.rsrt_docu_mng_no from sec_use_req_list s where s.rsrt_docu_mng_no = a.docu_mng_no and s.docu_seq = a.docu_seq order by rgst_dtime desc) AA where rownum = 1) , a.docu_mng_no ,'true' ,'false') as test from adm_conf_mng_book a , com_pdoc_by_docu c where 1=1 and a.docu_seq = b.docu_seq
위와같이 코드를짜면 A.DOCU_SEQ 부적합한 식별자(ORA 00904)가 발생합니다.
A는 확실히 해당 컬럼을 가지고 있고 a. <-을 삭제하면 되긴합니다만
false로 빠지게 되더라구요.. true값이 나오도록 값은 세팅되어 있구요..
어떤 방법을 사용하면 A.docu_seq를 사용할 수 있을까요?
어려운 질문드려서 정말 죄송합니다..
"Decode(" 에서 괄호가 부족해 보이는데요? "Decode(("
마지막 조건의 "b.docu_seq" 도 이상한데...
요것들은 단순 오타 나신거라 생각하고 패스..
- 원인 : 서브쿼리에서 메인항목을 조건으로 줄때 2Depth 이하로 못들어 갑니다.
- 해결 : 논리적으로 풀어야 합니다.
진자 2Depth 로 들어가야만 하는가?
rgst_dtime 역순으로 정렬후 s.rsrt_docu_mng_no 을 가져왔으나?
s.rsrt_docu_mng_no 은 어차피 (s.rsrt_docu_mng_no = a.docu_mng_no) 조건에 의해
a.docu_mng_no 와 같을 수밖에 없고...
(rownum = 1)에 의해 1건을 가져와 a.docu_mng_no 랑 비교하는데
이미 같은 걸 가져왔으므로 데이터가 존재한다면 같은건 당연지사..
따라서 정렬도 필요 없고 s.rsrt_docu_mng_no 도 필요 없고 오로지 존재여부만 판단하면 되는 상황
SELECT (SELECT NVL(MIN('true'), 'false') FROM sec_use_req_list s WHERE s.rsrt_docu_mng_no = a.docu_mng_no AND s.docu_seq = a.docu_seq AND ROWNUM = 1 ) AS test FROM adm_conf_mng_book a , com_pdoc_by_docu c WHERE 1=1 AND a.docu_seq = c.docu_seq ;