2009-10-25 107 views
0

我有3個表:ActiveRecord的查詢(城堡,性能)

  • Name:內部名稱,Active:布爾
  • 語言:語言(英語,法語,德語名單,...)
  • PartsTranslationsRealName和其他2個表的Id。

我想獲得的列表告訴我內部nameactive狀態多少翻譯缺失(共郎減法做翻譯)

我做了這個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ºquestion-最終查詢(昂貴的)的性能如何?

感謝

+0

如果對你有用,你可以使用Linq和Castle ActiveRecord。 – 2009-10-29 09:49:10

回答

0

我是能夠使這個查詢中的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]          
      }; 

我也對這個查詢做分頁,它也給我一個stronged類型PartProjection對象。這個類不需要任何ActiveRecord參數。

-1

我不能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; 
+0

您的第二個查詢正在工作,但無法運行第一個查詢:S ---->列'p.name'在選擇列表中無效,因爲它不包含在聚合函數或GROUP BY子句中。我怎樣才能讓它運行? – Dryadwoods 2009-10-25 22:42:02

+0

加入:GROUP BY p.id,p.name,p.active它的工作:)現在只需要知道如何在activerecord中運行這個:P Thanks Lukas – Dryadwoods 2009-10-25 23:03:00

相關問題