Email查询(堡、性能)
-
06-07-2019 - |
题
我已经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;
不隶属于 StackOverflow