我有一個wiki系統,其中有一箇中央表格Article,在其表中有許多修訂版。修訂每個包含一個created_at時間和日期列。將SQL加入最佳匹配行
我想更新文章以包含來自最新修訂版名稱字段的非規範化字段sort_name。
我可以發出什麼SQL命令來填充每個文章的sort_name字段及其最新修訂的名稱字段?
爲什麼它的價值,我在PostgreSQL。
我有一個wiki系統,其中有一箇中央表格Article,在其表中有許多修訂版。修訂每個包含一個created_at時間和日期列。將SQL加入最佳匹配行
我想更新文章以包含來自最新修訂版名稱字段的非規範化字段sort_name。
我可以發出什麼SQL命令來填充每個文章的sort_name字段及其最新修訂的名稱字段?
爲什麼它的價值,我在PostgreSQL。
表結構將有助於更好地定義您的問題。
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)
不是100%肯定PostgreSQL的語法,所以你可能要改變這一點了,但這個想法是:
UPDATE Articles
SET sort_name = (SELECT FIRST(name)
FROM Revisions
WHERE Revisions.id = Articles.id
ORDER BY created_at DESC)
如果我理解正確的話,你想加入到最新版本。以下是選擇最新版本進行更新的優化方式。讓我知道這是不是你想要的。它是爲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
而不是使之成爲一個共字的問題,你會好得多我們展示一些ASCII表或創建語句。你也更有可能得到一些有用的東西。 – 2010-06-18 02:25:35