根据 SQL 中的另一列填充列

Populate column based on another column in SQL

根据 df1 和 [=24= 的公共列 ID,在 df1 中用 name 填充列 A 的最佳方法是什么]?

df1

   ID   A 
   122  nan
   233  nan
       ...

df2

   ID   B    name 
   122  10   real_name1
   233  20   real_name2
       ... 

获得:

   ID   A 
   122  real_name1
   233  real_name2
        ...

编辑: 我还想将列名 A 更改为 new_column_name 因此预期的输出如下所示:

   ID   new_column_name
   122  real_name1
   233  real_name2
        ...

更新:

尝试过:

UPDATE t1
SET A = t2.name
FROM df1 t1
INNER JOIN df2 t2
    ON t2.ID = t1.ID;

它发现错误:

Msg 8152, Level 16, State 2, Line 48
String or binary data would be truncated.
The statement has been terminated.

更新2:

Table 定义

df1:

CREATE TABLE [dbo].[df1](
    [ID] [nvarchar](20) NULL,
    [SUB_ID2] [nvarchar](15) NOT NULL,
    [DATE] [datetime2](7) NULL,
    [MONTH] [nvarchar](4000) NULL,
    [QTY] [numeric](20, 8) NOT NULL,
    [SUB_ID] [nvarchar](15) NOT NULL,
    [X] [nvarchar](20) NULL,
    [SUBURB_ID] [nvarchar](30) NULL,
    [PROJECT_NAME] [nvarchar](160) NULL,
    [A] [varchar](10) NOT NULL
) ON [PRIMARY]

df2:

CREATE TABLE [dbo].[df2](
    [ID] [nvarchar](46) NULL,
    [NAME1] [nvarchar](50) NULL,
    [IDx] [nvarchar](15) NULL,
    [P] [nvarchar](50) NULL,
    [Q] [nvarchar](50) NULL,
    [Z] [nvarchar](50) NULL,
    [Y] [nvarchar](30) NULL,
    [MARK] [nvarchar](10) NULL,

) ON [PRIMARY]

这是简单的连接。

Select t1.id, t2.name as A
  From df1 t1 join df2 t2 on t1.id = t2.id

即使您在查询中不需要 df1df2.

中提供了所有必需的值

如果 df2 不包含某些 id 则使用 left join.

如果您真的想更新第一个table,那么使用:

UPDATE t1
SET A = t2.name
FROM df1 t1
INNER JOIN df2 t2
    ON t2.ID = t1.ID;

如果您真的想使用连接来表达更新逻辑,您可以使用更新table CTE:

WITH cte AS (
    SELECT t1.A, t2.name
    FROM df1 t1
    INNER JOIN df2 t2 ON t2.ID = t1.ID
)

UPDATE cte
SET A = name;