首页 > 解决方案 > 在 SQL Server 中连接两个表后设置列值

问题描述

表 1:tb1

|ID|Reference|
|1|ABCD|
|2|EFGH|
|3|IJKL|
|4|MNOP|
|5|MNOP|

表2:tb2

|Reference  |UpdatedID  |
|ABCD       |           |
|ABCD       |           |
|EFGH       |           |
|EFGH       |           |
|EFGH       |           |
|EFGH       |           |
|IJKL       |           |
|MNOP       |           |
|MNOP       |           |

我需要tb2tb1.

要连接的公共列是Reference两个表的列,其中 ID oftb1将更新为表的UpdatedIDtb1

应用连接列后,记录会增加,因为在tb1表中相同Reference具有不同的 ID,需要在tb2表中更新相同的 ID。

我应该如何进行。

使用的 JOIN 查询:

select 
    A.csvRefNumber,
    A.reference,
    B.reference
from 
    tb1 A
left join 
    tb2 B on A.Reference = B.Reference
order by 
    csvRefNumber

所需输出:

|Reference  |UpdatedID  |
|ABCD       |1          |
|ABCD       |1          |
|EFGH       |2          |
|EFGH       |2          |
|EFGH       |2          |
|EFGH       |2          |
|IJKL       |3          |
|MNOP       |4          |
|MNOP       |5          |

标签: sqlsql-serversql-server-2005

解决方案


你可以这样做:

UPDATE b SET b.UpdatedID = a.ID
FROM 
tb1 A
LEFT JOIN tb2 B
ON A.Reference = B.Reference

它基本上是加入表格和更新。我通常(像你一样)从一个SELECT声明开始,然后将其更改为UPDATE. 然后,您通过别名指定要更新的表,最后指定要设置为相等的列(或列)。


推荐阅读