从自表更新表,其中列中的值不为空

Mah*_*shi 1 sql t-sql sql-server sql-update

我有一个包含值的表:

dbid    name         userid
------------------------------
154     xyz          NULL
987     xyz          NULL
777     xyz          5
111     abc          NULL
745     abc          NULL
748     abc          6
Run Code Online (Sandbox Code Playgroud)

预期输出:

dbid     name     userid
------------------------------
154     xyz          5
987     xyz          5
777     xyz          5
111     abc          6
745     abc          6
748     abc          6
Run Code Online (Sandbox Code Playgroud)

userid 列中除一个名称对应的值外,所有空值均为空。我想在 userid 中为 name = 'xyz' 的所有行设置 5。同样,想要更新表以在 userid 中设置 6,其中 name = 'abc'。

对于上述场景,更新表的查询应该是什么?

注意:以上只是一个例子。我有一个包含数十万条记录的表。我无法在查询中写入 id 5 或 6。

小智 5

尝试这个

update table_name 
   set table_name.userid = (
        select top(1) ss.userid 
          from table_name ss 
         where ss.name = table_name.name 
           and ss.userid is not null
        ) 
    where table_name.userid is null
Run Code Online (Sandbox Code Playgroud)

此查询正在搜索userid名称相同的第一条记录,如果userid为空则更新