SQL для присоединения к наиболее подходящей строке - PullRequest
1 голос
/ 18 июня 2010

У меня есть вики-система, в которой есть центральная таблица Article, в которой много редакций в своей таблице. Каждая ревизия содержит столбец времени и даты create_at.

Я хочу обновить Статьи, чтобы они содержали денормализованное поле sort_name из поля имени самой последней редакции.

Какую команду SQL можно выполнить, чтобы заполнить поле sort_name каждой статьи ее полем имени самой последней редакции?

Для чего я стою, я на PostgreSQL.

Ответы [ 3 ]

2 голосов
/ 18 июня 2010

Не уверен на 100% в синтаксисе PostgreSQL, поэтому вам, возможно, придется немного изменить его, но идея такова:

UPDATE Articles
SET sort_name = (SELECT FIRST(name)
                 FROM Revisions
                 WHERE Revisions.id = Articles.id
                 ORDER BY created_at DESC)
1 голос
/ 18 июня 2010

Структура таблицы поможет лучше определить вашу проблему.

Для 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)
1 голос
/ 18 июня 2010

Если я вас правильно понял, вы хотите присоединиться к самой последней ревизии. Вот оптимизированный способ выбора самой последней версии для обновления. Дайте мне знать, если это не то, что вы искали. Он написан для 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...