1

我有一个 wiki 系统,其中有一个中央表 Article,它在自己的表中有许多修订。每个修订都包含 created_at 时间和日期列。

我想更新文章以包含来自最新修订名称字段的非规范化字段 sort_name。

我可以发出什么 SQL 命令来用其最新修订的名称字段填写每篇文章的 sort_name 字段?

对于它的价值,我在 PostgreSQL 上。

4

3 回答 3

2

不是 100% 确定 PostgreSQL 语法,所以你可能需要稍微改变一下,但想法是:

UPDATE Articles
SET sort_name = (SELECT FIRST(name)
                 FROM Revisions
                 WHERE Revisions.id = Articles.id
                 ORDER BY created_at DESC)
于 2010-06-18T02:28:37.957 回答
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
于 2010-06-18T03:55:19.353 回答
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)
于 2010-06-18T13:31:05.457 回答