1

我想在 QueryDSL JPA 中执行这个 SQL 请求

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

为了在表中找到重复的行,我应该执行这个请求。但是使用 QueryDSL,我找不到写这个的方法。

似乎 QueryDSL 不允许在 Inner Join 中使用 subQuery :s

有什么建议吗?

感谢和问候,

4

2 回答 2

1

你不能用 HQL/JPQL 来表达它,所以你需要用 SQL 来表达它。Querydsl JPA 提供了通过其 API 表达 JPQL 和 SQL 查询的可能性。

于 2012-10-10T06:45:30.387 回答
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;
于 2012-10-09T16:42:26.060 回答