【问题标题】:NHibernate INNER JOIN on a SubQuery子查询上的 NHibernate INNER JOIN
【发布时间】:2012-09-20 15:10:17
【问题描述】:

我想做一个子查询,然后内部连接结果以产生一个查询。我想这样做,因为我测试了一个内部连接查询,与直接 IN 子查询相比,它在 MySql 上的性能似乎要高得多。

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

表格

项目

  • 物品编号
  • 姓名

项目关系

  • 物品编号
  • RelationId

我想创建的示例 Sql

给我名称为“bob”的项目的关系计数:

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

有谁知道是否可以根据分离条件进行内部联接?

【问题讨论】:

    标签: mysql sql nhibernate


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-19
      • 2014-02-24
      • 2020-09-19
      • 1970-01-01
      相关资源
      最近更新 更多