아래와 같은 형식의 쿼리문 인데요,,, 에러가 납니다.
ORA-00904: "A.""nm1": 부적합한 식별자.
a.nm1 을 인식을 못하네요,,,
어떻게 해야 인식을 할까요?
select
(select count(*) from (select title2 from tbl1 where nm1 = a.nm1 group by nm2) dual)
from tbl1 a inner join tbl2 b on a.title1= b.title1
where nm1 <> ''
group by title1
order by title1
답변 부탁 드립니다.
감사합니다.
- 원인 : 메인쿼리의 항목이 서브쿼리의 2 Depth 안으로 들어가지 못합니다.
- 조치 : 2 Depth 침투가 꼭 필요한 상황인지 판단해보고 다른 방식으로 변경해야 합니다.
- 기타 : 위의 에러 말고도 오류가 많은 쿼리입니다.
- where nm1 <> '' 이 조건은 nm1 IS NOT NULL 로 바꿔야 하며
- Group By title1 을 했으므로 title1 을 제외한 다른 항목(a.nm1) 을 Select 에서 사용 못합니다.
Select 절의 서브쿼리 조건에서도 a.nm1 을 사용할 수 없다는 말이죠.
- 전체적으로 논리적인 오류를 가진 SQL 이므로 단순 문법오류 수정이 아닌
논리적인 오류를 해결해야 합니다.
빠른답변 감사드립니다.
쿼리 예문에 잘못 된점 죄송합니다.
원인 : 메인쿼리의 항목이 서브쿼리의 2 Depth 안으로 들어가지 못합니다.
=> 아 그렇군요;;
select count(*) from (select title2 from tbl1 where nm1 = a.nm1 group by nm2) dual
=> 이렇게 한 이유는..
select title2 from tbl1 where nm1 = a.nm1 group by nm2
=> 이러한 결과물로 row count 가 13개가 나왔는데, 제가 원하는 값은 단일 scalar 값인 13 이라는 거거든요.
그래서 dual 을 사용 하였습니다.
dual 말고 어떻게 사용 해야 할까요?
다시 한번 답변 부탁 드립니다.
지금 보니 이구문도 오류네요.
select title2 from tbl1 where nm1 = a.nm1 group by nm2
group by nm2 하면서 select title2 하고 있네요.
group by nm2 하면 select 절에 title2 가 올 수 없습니다.
문제는 2Depth 가 아닙니다.
Group By 가 문제입니다.
2Depth 문제는 Group By 에 대한 이해 부족으로 발생된 2차적인 문제입니다.
Group By 부터 해결하시는게 맞지 않을런지요?
아니면 질문 형태를 바꿔보세요.
원본자료와 그에 따른 결과자료를 예로 들고
결과가 나오게 되는 인과관계를 설명해주세요.
일단 2Depth 해결은...
- 전 : SELECT COUNT(*) FROM (SELECT 1 FROM t ...)
- 후 : SELECT COUNT(*) FROM t ...