关于SubQuery的NHibernate INNER JOIN

时间:2012-09-20 15:10:18

标签: mysql sql nhibernate

我想做一个子查询,然后内部连接结果,以产生一个查询。我想这样做,因为我测试了一个内部连接查询,与直接的IN子查询相比,它在MySql上看起来效率更高。

下面是我尝试重现的sql类型的一个非常基本的例子。

ITEM

  • 项目Id
  • 名称

ITEMRELATIONS

  • 项目Id
  • RelationId

示例Sql我想创建

给我一​​个名为'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

基础Nhibernate QueryOver

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,因为它被传递给我的代码并用于系统的其他部分。

有人知道是否可以在分离标准上进行内部联接?

1 个答案:

答案 0 :(得分:0)

MySql 5.6.5解决了与查询结构相关的性能问题。

见这里:http://bugs.mysql.com/bug.php?id=42259

我不需要再更改我的NHibernate查询的输出格式了。 :)

相关问题