[英]How to use Count(*) in JPQL
我有一個 JPQL 子查詢,我想在其中返回滿足基於 ManyToOne 關系的特定條件的 customerId 列表,如下所示:
SELECT c.customerId
FROM Customer c
INNER JOIN FETCH c.customersChild cc
LEFT JOIN FETCH c.childsPet cp on cp.name = 'Rover'
GROUP BY c.customerId
HAVING (COUNT(cp.name) / COUNT(*)) = 1
在這種情況下,只有當客戶的所有孩子的寵物名字都是 Rover 時,客戶才應該出現在列表中。 HAVING (COUNT(cp.name) / COUNT(*)) = 1
子句在 Oracle (SQL) 中按原樣工作,因為COUNT(cp.name)
計算每個客戶的非空行數,而COUNT(*)
計算每個客戶的總行數(包括由於左連接而出現的空值)...我相信COUNT(cp.name)
在 JPQL 中有效,但似乎沒有COUNT(*)
的等價物...有誰知道是否有辦法計算一個組中的所有行,包括空值?
我建議您將查詢重寫為更易於理解的反連接變體:
SELECT c.customerId
FROM Customer c
WHERE NOT EXISTS (
SELECT 1
FROM c.customersChild cc
JOIN cc.childsPet cp
WHERE cp.name = 'Rover'
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.