在添加新列Oracle PL / SQL后更新表的每一行

时间:2017-12-11 12:40:27

标签: database oracle plsql

我存储在数据库中的文档在同一文件的不同版本之间具有唯一ID(da_document_id)和共享ID(da_doc_id)。假设我们添加了同一种文件的新版本,da_document_id是唯一的,但da_doc_id保持不变。我在表中添加了一个新列,并希望使用该特定文件的最新版本的唯一ID填充它。此时,我正在使用最新版本的da_doc_id 14493更新所有记录。如何根据表中的不同da_doc_ids更新它?

UPDATE da_favourites
SET da_document_id = (SELECT da_document_id
                      FROM   da_documents
                      where  da_version = (SELECT MAX(da_version)
                                           FROM   da_documents
                                           WHERE  da_doc_id = 14493
                                           GROUP BY da_doc_id));

我希望它遍历da_favourites表的所有da_doc_ids。

@edit

表现在看起来像这样。我想用每个da_document_id填充特定da_doc_id的最新版本。一个da_doc_id可能在da_document_id 11111,22222等之间共享。每个da_document_id都有da_version,最初从1开始。选择da_doc_id的da_document_id,其中da_version最高。

enter image description here

在提供的代码中,我只更新特定da_doc_id 14493的da_document_id。我想从图像中查看所有内容。

1 个答案:

答案 0 :(得分:1)

你可能需要这样的东西(未经测试)。

UPDATE da_favourites o
   SET da_document_id =
          (SELECT da_document_id
             FROM da_documents d
            WHERE     da_version IN (  SELECT MAX (da_version)
                                         FROM da_documents i
                                        WHERE i.da_doc_id = d.da_doc_id
                                     GROUP BY i.da_doc_id)
                  AND d.doc_id = o.da_doc_id);