2012-06-18 33 views
-1

我有兩個相當大的表,我們稱它們爲'authors'和'articles'。 「articles」表中的每一行都與由「AuthorID」字段中的值表示的單個作者相關聯。'對於多個表中的單個SQL語句中的每個行爲'

我們有一個頁面,顯示一組符合特定條件的作者,以及與每個作者關聯的第一篇文章,按文章中'DatePublished'字段的值排序。

目前,這是通過執行多個查詢來實現的,這些查詢結果非常慢,特別是對於大量作者執行時。我並不是這方面的專家,但我非常確定有一種方法可以通過單個語句來獲取這些數據,這種語句將比當前的混亂更加優化。

爲了把它以另一種方式:(想每個函數調用作爲一個SQL查詢)

我們現在擁有的一切:

$authors = get_some_authors($criteria); 
for each($author in $authors) { 
    $author->lastArticle = get_latest_article_by_author($author_id); 
} 

我們所需要的:

$authors_with_last_articles = get_some_authors_and_their_latest_articles($criteria); 

我們正在使用MS SQL Server 9.0。

希望我能正確解釋問題。在此先感謝您的幫助。

+1

的sooo,這裏是您的疑問? :) –

回答

4

你可以使用一個outer apply實現for-each行爲:

select * 
from Authors 
outer apply 
     (
     select top 1 * 
     from Articles 
     where Authors.ID = Articles.AuthorId 
     order by 
       Articles.PublishDate desc 
     ) as LastArticle 
+0

正是我需要的。非常感謝您的快速回答。 –