我需要做一些事情来合并PGSQL中的一些用户,但我认为PGSQL不拥有merge属性。我只想知道如何让两个用户像这样匹配:
id | name | username | mail
1 | toto | tata | toto.tata@gmail.com
2 | titi | tutu | titi.tutu@gmail.com
在这里,我想选择我想要的数据。我想说,我只想将用户名从2合并到1,所以结果是:
id | name | username | mail
1 | toto | tutu | toto.tata@gmail.com
您只需要为第一个id选择所有列,而您需要的第二个id的列将是选择列表中的子查询。请检查以下答案以选择合并结果。
模式和插入语句:
create table users (id int , name varchar(50), username varchar(50), mail varchar(50));
insert into users values (1 , 'toto' , 'tata' , 'toto.tata@gmail.com');
insert into users values (2 , 'titi' , 'tutu' , 'titi.tutu@gmail.com');
查询:
select id,name,(select username from users where id=2) username,mail from users where id=1
输出:
id | 名称 | |
---|---|---|
1 | toto | /tr>
您可以使用聚合:
select min(id) as id,
max(name) filter (where id = 1) as name,
max(username) filter (where id = 2) as username,
max(mail) filter (where id = 1) as mail
from t
where id in (1, 2);
这假设您想要从特定的id
s中提取特定的列值。
或者您可以使用join
:
select t1.id, t1.name, t2.username, t1.mail
from t t1 join
t t2
on t1.id = 1 and t2.id = 2;
如果您确实想更改数据,请使用update
和delete
:
update t t1
set username = t2.username
from t t2
where t1.id = 1 and t2.id = 2;
delete from t
where t.id = 2;
这里有一个db<gt;不停摆弄