2012-10-09 30 views
1

我想在QueryDSL JPA查找MySQL的複製與行JPA QueryDSL

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子句效率較低。確保在authorizationitem.authorize上有一個索引來優化連接和GROUP BY。

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

你不能用HQL/JPQL表達這一點,所以你需要使用SQL來Expess同時此。 Querydsl JPA提供了通過API來表達JPQL和SQL查詢的可能性。

+0

嗨蒂莫,你能給我一個例子嗎?我不知道該怎麼做。謝謝 – khong07

+0

這裏是參考文檔的相關部分http://www.querydsl.com/static/querydsl/2.8.0/reference/html/ch02.html#d0e343 –