我已经3表:

  • 零件: Name:内部的名称, Active:bool
  • 语言:名单的语言(英语、法语、德语,....)
  • PartsTranslations: RealName 和身份证的其他2表。

我想获得一个名单 零件 告诉我的内部 name, active 状态 有多少翻译缺失(总lang减翻译)

我做了这个,SQL query这是给我我所需要的(我也不知道如果这是更好的办法让它,或者没有,但是它的工作):

SELECT 
    parts1.name, 
    parts1.active, 
    (
        (SELECT count(lang.id) 
            FROM languages AS lang) 
        - 
        (SELECT count(trans.id)
            FROM parts AS parts2 
            INNER JOIN partstranslations as trans
            ON parts2.id = trans.partid
            WHERE parts2.id = parts1.id)        
    )
from parts as parts1;

1º的问题- 我怎么能让这个查询使用的城堡Email?

2º问题- 怎么样的性能,最终的查询(一)?

感谢

有帮助吗?

解决方案

我能够使这一查询在使用Email HqlBasedQuery, 所以我在这里发表的答复,以帮助其他人在同样情况作为我。

HqlBasedQuery query = new HqlBasedQuery(typeof(Part),
 @"
    SELECT                     
        par.Id, 
        par.Name, 
        par.Active,                                         
        (SELECT count(*) - count(trans) FROM Language)                                                            
    FROM Part par
        LEFT JOIN par.PartsTranslations trans
    GROUP BY par.Id, par.Name, par.Active, trans.Part
    ");
query.SetQueryRange(startId, currentPageSize);

var results = from object[] summary in
              (ArrayList)ActiveRecordMediator.ExecuteQuery(query)
          select new PartProjection
          {
              Id = (int)summary[0],
              Name = (string)summary[1],
              Active = (bool)summary[2],
              TransMissing = (long)summary[3]                                       
          };

我也有分页上查询和它还给我stronged类型 PartProjection 对象。这类并不需要有任何Email参数。

其他提示

我不能帮助Email,但这种查询应该更好地执行于一个相关的子查询。

SELECT
    p.name,
    p.active, 
    (SELECT count(*) FROM languages) - count(pt.divid)
FROM
    Parts p
    LEFT JOIN PartsTranslations pt ON p.id=pt.divid
GROUP BY p.id, p.name, p.active

或者,如果你想使用的相关查询,你不需要选择 Parts 在它再次:

SELECT 
    p.name, 
    p.active, 
    (SELECT count(*) FROM Languages) - 
    (SELECT count(*) FROM PartsTranslations WHERE divid = p.id)            
FROM Parts p;
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top