2010-11-27 25 views
1

說我有一個兩列的表,X和Y 我想通過Hibernate來運行下面的查詢:在hibernate中計算列過濾? (有)

SELECT X*X + Y*Y AS Distance, POINTS.* from POINTS 
WHERE X > 0 
AND Y > 0 
HAVING Distance < 50 

如何通過Hibernate的實現呢?你能提供一個代碼示例嗎?

編輯 - This question似乎密切相關。我沒有把它作爲一個副本關閉的唯一原因是因爲它提供了一個更簡單的用例(沒有GROUP BY)。

+0

該語法無效。 HAVING不使用GROUP BY分組是不允許的SQL – 2010-11-27 13:27:40

回答

0

在SQL的大多數方言中,不能使用'顯示標籤'或'AS名稱'中的名稱來引用查詢正文中的表達式 - 這非常令人懊惱。但是,您可以在WHERE子句中使用該表達式。

SELECT X*X + Y*Y AS DistanceSquared, POINTS.* from POINTS 
WHERE X > 0 
    AND Y > 0 
    AND (X * X + Y * Y) < 50; 

HAVING子句與聚集體和比較相關聯的聚集體上:

SELECT name, COUNT(*) 
    FROM SomeWhere 
GROUP BY Name 
HAVING COUNT(*) > 1; 

條件HAVING子句中必須(應該)涉及至少一個「直接」骨料;條件中的另一個術語可能是一個常數(如圖所示)或另一個直接聚合或子查詢,可能涉及「間接」聚合。 (AFAIK,我發明了這個答案的'直接/間接'術語 - 你可能無法有效地搜索表達式。)