我有一个wiki系统,其中有一个中心表Article,它在自己的表中有许多修订版。每个修订包含created_at时间和日期列。
我想更新文章以包含最新修订版名称字段中的非规范化字段sort_name。
我可以发出什么SQL命令来填写每个Article的sort_name字段及其最新版本的名称字段?
对于它的价值,我在PostgreSQL上。
答案 0 :(得分:2)
不是100%肯定PostgreSQL语法,所以你可能需要稍微改变一下,但想法是:
UPDATE Articles
SET sort_name = (SELECT FIRST(name)
FROM Revisions
WHERE Revisions.id = Articles.id
ORDER BY created_at DESC)
答案 1 :(得分: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
答案 2 :(得分: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)