ActivereCord 쿼리 (성, 성능)
-
06-07-2019 - |
문제
나는 3 개의 테이블 :
- 부속:
Name
: 내부 이름,Active
: 부 - 언어: 언어 목록 (영어, 프랑스어, 독일어, ....)
- 파트 스트립:
RealName
그리고 다른 두 테이블 중 ID입니다.
목록을 받고 싶습니다 부속 내부를 말해주십시오 name
, active
상태 그리고 누락 된 번역 수
나는이 SQL 쿼리를 내가 필요한 것을 제공하는 것을 만들었습니다 (이것이 더 좋은 방법인지 아닌지는 모르겠지만 작동합니다) :
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º 질문- Castle ActiveRecord를 사용 하여이 쿼리를 어떻게 만들 수 있습니까?
2º 질문- 최종 쿼리의 성능은 어떻습니까 (비싼 쿼리)?
감사
해결책
ActiveRecord 에서이 쿼리를 만들 수있었습니다. 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]
};
나는 또한이 쿼리에 대한 페이지 매김이 있었고 강력한 타이핑을 제공합니다. PartProjection
사물. 이 클래스에는 ActiveRecord 매개 변수가 필요하지 않습니다.
다른 팁
ActiveRecord를 도울 수는 없지만이 쿼리는 상관 관계가있는 하위 쿼리보다 더 잘 수행해야합니다.
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