我想做一个子查询,然后内部连接结果,以产生一个查询。我想这样做,因为我测试了一个内部连接查询,与直接的IN子查询相比,它在MySql上看起来效率更高。
下面是我尝试重现的sql类型的一个非常基本的例子。
ITEM
ITEMRELATIONS
给我一个名为'bob'的ITEM的COUNT:
select ir.itemId, count(ir.relationId)
from ItemRelations ir
inner join (select itemId from Items where name = 'bob') sq
on ir.itemId = sq.itemId
group by ir.itemId
var bobItems = QueryOver.Of<Item>(() => itemAlias)
.Where(() => itemAlias.Name == "bob")
.Select(Projections.Id());
var bobRelationCount = session.QueryOver<ItemRelation>(() => itemRelationAlias)
.Inner.Join(/* Somehow join the detached criteria here on the itemId */)
.SelectList(
list =>
list.SelectGroup(() => itemRelationAlias.ItemId)
.WithAlias(() => itemRelationCountAlias.ItemId)
.SelectCount(() => itemRelationAlias.ItemRelationId)
.WithAlias(() => itemRelationCountAlias.Count))
.TransformUsing(Transformers.AliasToBean<ItemRelationCount>())
.List<ItemRelationCount>();
我知道有可能将其重构为单个查询,但上面只是一个简单的例子。我无法更改分离的QueryOver,因为它被传递给我的代码并用于系统的其他部分。
有人知道是否可以在分离标准上进行内部联接?
答案 0 :(得分:0)
MySql 5.6.5解决了与查询结构相关的性能问题。
见这里:http://bugs.mysql.com/bug.php?id=42259
我不需要再更改我的NHibernate查询的输出格式了。 :)