Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql SQL连接到最佳匹配行_Postgresql_Denormalization - Fatal编程技术网

Postgresql SQL连接到最佳匹配行

Postgresql SQL连接到最佳匹配行,postgresql,denormalization,Postgresql,Denormalization,我有一个wiki系统,其中有一个中心表,即文章,它在自己的表中有许多修订。每个修订都包含“创建时间”和“日期”列 我想更新文章,使其包含来自最新版本名称字段的非规范化字段sort_name 我可以发出什么样的SQL命令来用最新版本的名称字段填充每篇文章的sort_name字段 值得一提的是,我使用的是PostgreSQL。不是100%确定PostgreSQL语法,因此您可能需要对其进行一些更改,但想法是: UPDATE Articles SET sort_name = (SELECT FIRST

我有一个wiki系统,其中有一个中心表,即文章,它在自己的表中有许多修订。每个修订都包含“创建时间”和“日期”列

我想更新文章,使其包含来自最新版本名称字段的非规范化字段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)

并非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

如果我理解正确,您希望加入最新版本。下面是一种优化的方法,可以选择最新的修订版本进行更新。如果这不是你想要的,请告诉我。它是为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

表结构将有助于更好地定义问题

对于博士后:

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)

表结构将有助于更好地定义问题

对于博士后:

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)

与其让这成为一个完全的单词问题,不如向我们展示一些ascii表或创建语句。你也更有可能得到一些有用的东西。与其让这成为一个完全的单词问题,不如向我们展示一些ascii表或创建语句。你也更有可能得到一些有用的东西。