[스프링DATAJPA팁]Querydsl4.0.8오라클쿼리WITH구문오류!!(Querydsl,오라클쿼리강좌)
아래와 같은 SQL 쿼리를 만들기 위해
(WITH문을 이용하여 MYEMP1, MYDEPT1 테이블에서 부서명, 부서별직원평균급여 구하기)
with myemp2 as (
select MYEMP1.DEPTNO, avg(MYEMP1.SAL) sal
from TEST.MYEMP1 MYEMP1
group by MYEMP1.DEPTNO)
select MYDEPT1.DNAME, myemp2.SAL
from MYDEPT1
inner join myemp2
on MYDEPT1.DEPTNO = myemp2.DEPTNO
다음과 같이 Querydsl4.0.8 버전에서 작성했는데
QMyemp1 myemp1 = new QMyemp1.myemp1;
QMyemp1 myemp2 = new QMyemp1("myemp2");
List<Tuple> depts = queryFactory.query()
.with(myemp2,
SQLExpressions
.select(myemp1.deptno, myemp1.sal.avg().as("sal"))
.from(myemp1)
.groupBy(myemp1.deptno))
.select(mydept1.dname, myemp2.sal)
.from(mydept1)
.innerJoin(myemp2).on(mydept1.deptno.eq(myemp2.deptno))
.fetch();
Querydsl4.0.8 버전에서는 WITH구문이 다음과 같이 해석된다.
(innerjoin에서 WITH구문에서 만든 myemp2와 조인을 해야되는데
myemp1 테이블과 조인하여 이상한 결과가 나오게 된다. )
with myemp2 as (
select MYEMP1.DEPTNO, avg(MYEMP1.SAL) sal
from TEST.MYEMP1 MYEMP1
group by MYEMP1.DEPTNO)
select MYDEPT1.DNAME, myemp2.SAL
from MYDEPT1
join MYEMP1 myemp2
on MYDEPT1.DEPTNO = myemp2.DEPTNO
Querydsl 버전을 4.0.9 이상으로 올리자.
잘 동작된다.
댓글 없음:
댓글 쓰기