在SQL Server中加入两个表后设置列值

时间:2018-07-31 12:34:10

标签: sql sql-server sql-server-2005

表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       |           |

我需要在tb2的基础上更新表tb1的空白列。

要联接的公共列是两个表的Reference列,其中tb1的ID将更新为UpdatedID表的tb1列。

应用连接列后,记录将增加,如tb1表中一样,同一Reference具有不同的ID,需要在tb2表中进行相同的更新。

我应该如何进行。

使用的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          |

2 个答案:

答案 0 :(得分:0)

您可以这样做:

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

基本上是在联接表并进行更新。我通常像您一样从SELECT语句开始,然后将其更改为UPDATE。然后,通过别名来指定要更新的表,最后要设置为相等的列。

答案 1 :(得分:0)

我想这就是你想要的:

update tb2
    set updateid = tb1.id
    from tb2 join
         tb1
         on tb2.reference = tb1.reference;