簡體   English   中英

如何在 JPQL 中使用 Count(*)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM