PostgreSQL用数据填充列



我试图用同一表中的数据填充表中的空行。这是我的代码:

create table public.testdata(
id INTEGER,
person INTEGER,
name varchar(10));
insert into testdata (id, person,name) VALUES ( 1,1,'Jane' ), ( 2,1,'Jane' ), ( 3,1,NULL ), ( 4,2,'Tom' ), ( 5,2,NULL );

select * from testdata;

在此处输入图像描述

基本上,我希望名字"简"在第三排,名字"汤姆"在第五排。

这是我在网上找到的一个类似问题的答案:

Update testdata
SET name = COALESCE(a1.name, b1.name) 
FROM testdata a1 
JOIN testdata b1 
on a1.person = b1.person 
and a1.id <> b1.id 
where a1.name is NULL;

但如果我运行这个代码,我会在每一列中得到名字"Jane",这不是我想要的。我感谢任何帮助和建议。

示例:

select t1.id, t1.person, t2.name from testdata t1 
left join 
(
select distinct person, name from testdata
where name is not null
) t2 on t1.person = t2.person 

通过CTE获取人员(id?(和所需姓名。然后使用结果更新名称。因此(见演示(:

with namer (person, name) as 
( select distinct on (person) 
person, name 
from testdata
where name is not null
order by person, name
) 
update testdata d1
set name = (select n1.name
from namer n1 
where n1.person = d1.person
) 
where d1.name is null;

注意:Demo包含额外的行,其中行的输入顺序不理想。并不是所有的person值都有关联的名称。

相关内容

  • 没有找到相关文章

最新更新