我有两列id和name的表。 Id包含空值,名称包含一些名称值。表中有重复的行。要求是使用与名称值匹配的某个值更新空值(id)。查找下表
Id Name
---------------
1 abc
1 abc
1 abc
1 abc
NULL abc
NULL abc
NULL abc
2 xyz
2 xyz
2 xyz
NULL xyz
NULL xyz
上面的表在id列中具有空值。我必须用Id更新Null值。例如,对于abc,我必须更新1,而xyz必须更新2。
答案 0 :(得分:2)
使用自我加入
update A
SET Id = B.id
FROM YourTable A
INNER JOIN YourTable B
ON a.Name = B.Name
WHERE A.id IS NULL
AND b.Id IS NOT NULL
答案 1 :(得分:0)
我们假设表格的名称是' name'。 尝试执行以下查询。
update names n set n.Id = (select max(Id) from names where upper(Name) = upper(n.Name)) where n.Id is null;
答案 2 :(得分:0)
试一试:
update MY_TABLE set id = new_id from
(
select id [new_id], name [new_name] from MY_TABLE
where id is not null
) A
where name = new_name