2010-06-18 69 views
1

我有一個wiki系統,其中有一箇中央表格Article,在其表中有許多修訂版。修訂每個包含一個created_at時間和日期列。將SQL加入最佳匹配行

我想更新文章以包含來自最新修訂版名稱字段的非規範化字段sort_name。

我可以發出什麼SQL命令來填充每個文章的sort_name字段及其最新修訂的名稱字段?

爲什麼它的價值,我在PostgreSQL。

+0

而不是使之成爲一個共字的問題,你會好得多我們展示一些ASCII表或創建語句。你也更有可能得到一些有用的東西。 – 2010-06-18 02:25:35

回答

1

表結構將有助於更好地定義您的問題。

Postgres的:

UPDATE ARTICLES ar 
SET sort_name = (SELECT name FROM Revisions rev 
       WHERE rev.article_id = ar.article_id 
       ORDER BY rev.createdate DESC LIMIT 1) 
2

不是100%肯定PostgreSQL的語法,所以你可能要改變這一點了,但這個想法是:

UPDATE Articles 
SET sort_name = (SELECT FIRST(name) 
       FROM Revisions 
       WHERE Revisions.id = Articles.id 
       ORDER BY created_at DESC) 
1

如果我理解正確的話,你想加入到最新版本。以下是選擇最新版本進行更新的優化方式。讓我知道這是不是你想要的。它是爲T-SQL編寫的,因爲我不熟悉PostgreSQL

UPDATE ARTICLES 
SET SORT_NAME = lastHist.NAME 
FROM ARTICLES AS t 
    --Join the the most recent history entries 
     INNER JOIN REVISION lastHis ON t.ID = lastHis.FK_ID 
     --limits to the last history in the WHERE statement 
      LEFT JOIN REVISION his2 on lastHis.FK_ID = his2.FK_ID and lastHis.CREATED_TIME < his2.CREATED_TIME 
WHERE his2.ID is null