我有3个实体:汽车,出租和客户。 租金与汽车和客户有关。
我需要编写查询查询来查找10多个不同客户租用的汽车
以下代码:
@Override
public List<CarEntity> findCarsRentedByDifferentCustomers() {
TypedQuery<CarEntity> query = entityManager.createQuery(
"SELECT car FROM CarEntity car join car.rentals cr " +
"WHERE(SELECT COUNT(re) FROM RentalEntity re " +
"join re.customer c " +
"GROUP BY c.id) > 10", CarEntity.class
);
return query.getResultList();
}
我总是得到DataIntegrityViolationException
或InvalidDataAccessApiUsageException
。我已经尝试过以多种不同方式编写此查询。
答案 0 :(得分:1)
查询可以更像下面的查询。
内部查询与“租车”表中的car_id相匹配,并检查是否有10个以上的独立客户租用了一辆独特的汽车。
请注意,您可能需要将查询更改为使用正确的表列。
您没有提供表结构和示例数据。
SELECT
Car.*
FROM
Car
WHERE
Car.id IN (
SELECT
Rental.car_id
FROM
Rental
GROUP BY
Rental.car_id
HAVING
COUNT(DISTINCT Rental.customer_id) > 10
)
答案 1 :(得分:0)
在标准SQL中,查询如下:
SELECT cr.car
FROM car.rentals cr
GROPU BY cr.car
HAVING COUNT(DISTINCT re.customer) >= 10;
答案 2 :(得分:0)
use.agregate函数的sql代码在下面
select c.id from car c inner join
rentals r on c.rentalid=r.rentalid
group by c.id
having count(distinct customerid)>10
答案 3 :(得分:0)
错误是我尝试按customer.id而不是car.id进行分组,并且试图在jpql查询语法中找到错误。 现在我的代码如下:
@Override
public List<CarEntity> findCarsRentedByDifferentCustomers() {
TypedQuery<CarEntity> query = entityManager.createQuery(
"select car from CarEntity car " +
"where car.id in (select re.car.id from RentalEntity re " +
"group by re.car.id " +
"having count(distinct re.customer.id) > 10)", CarEntity.class
);
return query.getResultList();
}
@Raymond Nijland,@ Zaynul Abadin Tuhin谢谢你的回答