SQL UPDATE(从一行复制到另一行)

Posted

技术标签:

【中文标题】SQL UPDATE(从一行复制到另一行)【英文标题】:SQL UPDATE (copy from row to row) 【发布时间】:2021-12-28 08:26:39 【问题描述】:

我想尝试将表中的一条记录中的值复制到同一表中同一列的另一条记录中。

    UPDATE
    [PDF]
SET
    [PDF].[description] = [MISC].[description]
FROM (
    SELECT
          [PDF].[TPYE]
         ,[ID]
         ,[PDF].[description]
    FROM [DB1] AS [PDF]
    
    INNER JOIN (
        SELECT
             [TYPE]
             [description]
             [ID]
        FROM [DB1]
        WHERE [TYPE] = 'MISC'
            ) AS [MISC] ON [PDF].[ID] = [MISC].[ID]
WHERE
    [PDF].[TPYE] = 'PDF'

为了更清楚,我添加了一个截图。enter image description here

表格包含几千行,我想将描述从一行复制到另一行 - 取决于 NUMBER 和 TYPE。

【问题讨论】:

注意 - 表格有 ,而不是 记录 请用更多描述澄清您的问题,让我知道什么是当前表格数据和期望数据 您有名为 DB1 的 table 吗?表名的选择非常混乱... 我不明白你在尝试什么。您只有一个表 (DB1),因此如果您更新 id = id 的位置,那么您什么也没有更新。我猜你想更新 type = 'PDF' 的描述并复制一些 type = 'MISC' 的记录的描述,但是......你需要另一个字段来匹配一个记录,不是吗?跨度> 在您的屏幕截图中,您似乎有一个名为 DB1schema - 非常奇怪。 【参考方案1】:

以这个为例。你已经很接近了。

DECLARE @DB1 AS TABLE ( ID          INT           NOT NULL
,                       TYPE        NVARCHAR(4)   NOT NULL
,                       Description NVARCHAR(255) NULL )

INSERT INTO @DB1 ( ID, TYPE, Description )
VALUES ( 1, N'PDF', N'' )
,      ( 1, N'MISC', N'Description 1' )
,      ( 2, N'PDF', N'' )
,      ( 2, N'MISC', N'Description 2' )

SELECT  *
  FROM  @DB1
 WHERE  TYPE = 'PDF'

UPDATE  PDF
   SET  PDF.Description = MISC.Description
  FROM  @DB1 PDF
  JOIN  @DB1 MISC ON MISC.ID = PDF.ID
                 AND MISC.TYPE = 'MISC'
 WHERE  PDF.TYPE = 'PDF'

SELECT  *
  FROM  @DB1
 WHERE  TYPE = 'PDF'

请注意,如果您将来可以包含一些示例数据以供其他读者使用,将会有所帮助。我创建表结构并用一些测试数据填充它的方式是如何完成此操作的基本示例。

如果您发现某个答案有用且正确,请不要忘记将其标记为有用且正确的答案并点赞。这将帮助其他用户知道什么是有效的。这通常适用于整个网站,而不仅仅是您自己的问题。

【讨论】:

以上是关于SQL UPDATE(从一行复制到另一行)的主要内容,如果未能解决你的问题,请参考以下文章

将一行从一个表复制到另一个

如何从一个DataTable中复制数据行到另一个DataTable中

[MySql]如何将一行从一个表复制到另一个并填充额外的列?

在 SQL 中将行从一个表复制到另一个表

数据库多行拼接到一行Oracle和sqlServer

如何使用特定单词在excel中复制一行并粘贴到另一个excel表?