如何遍历一个表并根据另一个表中的数据更新特定列?

时间:2019-10-31 12:39:49

标签: sql sql-server loops

所以我有两个表,一个 users 表和一个 user_roles 表:

用户
| user_id用户名||
|:-------------- || -----------------:|
| 1 | userX ||
| 2 | userY

user_roles
|用户名| user_id。|
|:----------------- | ---------------:|
| userX | NULL ||
| userY | NULL ||

我需要以某种方式遍历 user_roles 表。对于 user_roles 中每个与 users 中的 user_name 匹配的 user_name < / strong>,应该在 user_roles 中设置特定的user_id而不是NULL。我该怎么做?

注意:用户表中的用户名是唯一的。

2 个答案:

答案 0 :(得分:0)

  

对于user_name中每个与user_roles中的user_name相匹配的users,应设置特定的user_id而不是{ {1}}

您可以使用相关子查询:

NULL

这假设user_rolesupdate user_roles r set r.user_id = ( select u.user_id from users u where u.user_name = r.user_name ) 中是唯一的。如果不是,那么您将需要某种聚合或筛选,以便subuquery仅返回一个记录。例如,这将从匹配的user_name中选择较小的users

user_id

在SQL Server中,语法略有不同:

user_name

答案 1 :(得分:0)

它可能比使用子查询要好一些,但都可以。

update r
set r.user_id = u.user_id
from user_roles r LEFT JOIN users u ON r.Username = u.Username