我有一个 wiki 系统,其中有一个中央表 Article,它在自己的表中有许多修订。每个修订都包含 created_at 时间和日期列。
我想更新文章以包含来自最新修订名称字段的非规范化字段 sort_name。
我可以发出什么 SQL 命令来用其最新修订的名称字段填写每篇文章的 sort_name 字段?
对于它的价值,我在 PostgreSQL 上。
我有一个 wiki 系统,其中有一个中央表 Article,它在自己的表中有许多修订。每个修订都包含 created_at 时间和日期列。
我想更新文章以包含来自最新修订名称字段的非规范化字段 sort_name。
我可以发出什么 SQL 命令来用其最新修订的名称字段填写每篇文章的 sort_name 字段?
对于它的价值,我在 PostgreSQL 上。
不是 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
表结构将有助于更好地定义您的问题。
对于 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)