1

中央のテーブルArticleがあり、独自のテーブルに多くのリビジョンがあるwikiシステムがあります。リビジョンにはそれぞれ、created_atの時刻と日付の列が含まれています。

最新のリビジョンの名前フィールドからの非正規化フィールドsort_nameを含むようにArticlesを更新したいと思います。

各Articleのsort_nameフィールドに最新のリビジョンのnameフィールドを入力するために発行できるSQLコマンドは何ですか?

その価値については、私はPostgreSQLを使用しています。

4

3 に答える 3

2

PostgreSQLの構文が100%確実ではないため、これを少し変更する必要があるかもしれませんが、アイデアは次のとおりです。

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

私があなたを正しく理解しているなら、あなたは最新のリビジョンに参加したいと思います。これは、更新を行うために最新のリビジョンを選択するための最適化された方法です。これがあなたが探していたものではなかったかどうか私に知らせてください。私はPostgreSQLに精通していないため、T-SQL用に作成されています

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 に答える