2012-10-09 3 views
1

와 MySQL의에서 중복 행을 찾기 나는 내가이 요청을 실행해야 테이블에서 중복 행을 찾기 위해 QueryDSL JPAQueryDSL JPA

SELECT authorizationitem.* 
FROM authorizationitem 
INNER JOIN 
(
    SELECT `authorize` 
    FROM authorizationitem 
    GROUP BY `authorize` 
    HAVING COUNT(*)>1 
) a2 
    ON authorizationitem.`authorize` = a2.`authorize`; 

이 SQL 요청을 실행하고 싶습니다. 그러나 QueryDSL로, 나는 이것을 쓰는 방법을 찾을 수 없습니다.

이 QueryDSL은 내부에 하위 쿼리가 가입을 허용하지 않는 것 같다 :의

어떤 제안?

감사 관련,

답변

0

당신은 WHERE 절에 하위 쿼리를 사용하여 시도 할 수 있지만, 아마도 FROM 절에서 서브 쿼리보다 효율적입니다. 조인과 GROUP BY를 최적화하기 위해 authorizationitem.authorize에 색인이 있는지 확인하십시오.

SELECT authorizationitem.* 
FROM authorizationitem 
WHERE EXISTS (
    SELECT `authorize` 
    FROM authorizationitem2 
    WHERE authorizationitem2.authorize = authorizationitem.authorize 
    GROUP BY `authorize` 
    HAVING COUNT(*)>1 
); 

또는

SELECT authorizationitem.* 
FROM authorizationitem 
WHERE (
    SELECT count(*) 
    FROM authorizationitem2 
    WHERE authorizationitem2.authorize = authorizationitem.authorize 
    GROUP BY `authorize` 
) > 1; 
1

당신이 SQL로이 expess해야합니다, 그래서 당신은 HQL/JPQL에이 표현할 수 없습니다. Querydsl JPA는 API를 통해 JPQL과 SQL 쿼리를 모두 표현할 수있는 기능을 제공합니다.

+0

안녕 티모, 내게 모범을 보여 주겠니? 나는하는 법을 모르겠다. 감사합니다 – khong07

+0

다음은 참조 문서 http://www.querydsl.com/static/querydsl/2.8.0/reference/html/ch02.html#d0e343의 관련 부분입니다. –