即时通讯使用grails 2.4.5
我想根据他们有多少契约(Contract)来检索前三名客户
我试图执行此代码
def customers = Customer.executeQuery("Select cu, (Select count(*) from Contract co where co = cu.contract) from Customer cu",
[max: 3])
它返回此错误
二进制逻辑运算符的左右两侧不兼容[com.cms.Contract:java.util.Set(com.cms.Customer.contract)]
我了解co和cu.contract类型不同,但我不明白为什么。有人可以帮我这个grails的executeQuery如何工作。这是我使用的唯一具有静态查询执行但仍需要遵循某种格式的框架。
我真正想做的是生成这样的查询
Select * from Customer cu order by (Select count(*) from Contract co where co.id = cu.id)
最佳答案
您可以尝试使用带有投影的Criteria查询:
def results = Customer.createCriteria().list() {
createAlias( 'contracts', 'contractalias' )
projections {
groupProperty( 'contractalias.contract' )
count( 'contractalias.contract', 'contractCount' )
}
maxResults( 3 )
order 'contractCount', 'desc'
}
我不是您字段名称的100%,因此必须在上述查询中假设。
尝试这些查询时打开sql日志记录通常非常有用,例如在开发数据源中添加以下内容
development {
dataSource {
...
logSql = true
}
}
关于grails - Grails executeQuery子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44104369/