2014-08-28 36 views
0

清潔SQL語法(MySQL的)允許 「由LEFT(...)組」 例與選擇:如何通過HQL中的LEFT(t.field,6)選擇組?

SELECT * FROM `table` t 
WHERE t.field1 = 777 AND t.field2 = 0 
GROUP BY LEFT(t.field3, 6) 
HAVING COUNT(*) = 4; 

但是,如果我嘗試使用HQL:

" select t from TableEntity t " + 
" where t.field1 = :field_1 and t.field2 = :field_2 " + 
" group by LEFT(t.field3, 6) " + 
" having COUNT(*) = :other_condition " 

我得到了一個exe文件 org.hibernate.hql.ast.QuerySyntaxException:意外標記:在第1行第12列附近出現[

在這種情況下可以使用HQL嗎?

回答

2

我不認爲你可以做你想做的事情,因爲MySQL擴展了group by--一個其他數據庫通常不支持的擴展。你可以做這樣的事情:

SELECT substring(t.field3, 1, 6), count(*) as cnt 
FROM `table` t 
WHERE t.field1 = 777 AND t.field2 = 0 
GROUP BY substring(t.field3, 1, 6) 
HAVING COUNT(*) = 4; 

注意的是,在group by的未聚集列也都在select