2012-06-15 220 views
2

內HQL比較考慮HQL以下查詢:select語句

SELECT m.id, (SELECT (COUNT(*) > 0) FROM SubqueryTable...) FROM MyTable AS m; 

我需要爲布爾來自SELECT查詢裏面的select返回的信息與信息是否存在滿足該查詢的任何條目。

上述查詢可以在SQL中正常工作,但是hibernate會給我一個錯誤。我不能使用具有聚合函數的比較運算符。

在HQL中從select子句中的子選擇中獲取信息的正確方法是什麼?

回答

3

不知道如何可以轉化成HQL,但你的查詢可以寫成:

SELECT m.id, 
     (SELECT COUNT(*) FROM SubqueryTable...) > 0 
     AS b 
FROM MyTable AS m; 

但是,也許你可以使用此 - 因爲它是使用INT列,這似乎是繞過這個問題:

SELECT m.id, 
     CASE WHEN (SELECT COUNT(*) FROM SubqueryTable...) > 0 
      THEN 1 
      ELSE 0 
     END AS b 
FROM MyTable AS m; 

您也可以嘗試用EXISTS

SELECT m.id, 
     EXISTS (SELECT * FROM SubqueryTable...) 
     AS b 
FROM MyTable AS m; 

或:

SELECT m.id, 
     CASE WHEN EXISTS (SELECT * FROM SubqueryTable...) 
      THEN 1 
      ELSE 0 
     END AS b 
FROM MyTable AS m; 
+0

帶有存在的查詢對我無效,但第一個帶有CASE的查詢做到了。使用案例的想法讓我感到害怕,但它似乎是它工作的唯一方式。謝謝。 – Romeo

+0

我的猜測是它與布爾和'BOOLEAN'(對MySQL意味着'TINYINT')有關。 –

+0

或者MySQL和HQL如何處理(不同的)True/False結果/列。 –