根据另一个 table 插入第一个 table

Insert to first table based on another table

我有以下人员table:

人数:

| id   | f_name  | l_name    | role  |
|:-----|:-------:|:---------:| -----:|
| 1    | John    | Nathan    | 1     |
| 2    | Brand   |  Ba       | 1     |
| 3    | Bob     |  Do       | 2     |
| 4    | Alice   |  Sia      | 1     |

和用户table:

用户:

| id   | f_name  | l_name | role  |
|:-----|:-------:|:------:| -----:|
| 1    | John    | Tom    |   1   |

我希望 People table 中角色为 1 的任何人都在 Users table 中,这样如果他们不在 users table 中,我会将它们插入到table,如果他们确实存在,我会根据 ID 列

根据人员 table 更新他们的姓名和角色

期望的结果:

用户:

| id   | f_name  | l_name    | role  |
|:-----|:-------:|:------:   | -----:|
| 1    | John    | Nathan    |   1   |
| 2    | Brand   | Ba        |   1   |
| 3    | Bob     | Do        |   1   |

提前致谢!

根据@Larnu 的建议,您可以在 sql 服务器中使用 MERGE:

架构和插入语句

create table people( id int ,f_name  varchar(25), l_name varchar(25),role  int);
insert into people values( 1    ,'John', 'Nathan', 1);     
insert into people values( 2    ,'Brand','Ba'    , 1);     
insert into people values( 3    ,'Bob',  'Do'    , 2);     
insert into people values( 4    ,'Alice','Sia'   , 1);     


create table Users( id int,  f_name varchar(25), l_name varchar(25), role int);
insert into Users values( 1    ,'John' ,'Tom' ,1 );

合并查询:

MERGE Users AS TARGET
USING people AS SOURCE 
ON (TARGET.id = SOURCE.id) 
--When records are matched, update the records 
WHEN MATCHED 
THEN UPDATE SET TARGET.f_name = SOURCE.f_name, TARGET.l_name = SOURCE.l_name 
--When no records are matched, insert the incoming records from source table to target table
WHEN NOT MATCHED BY TARGET 
THEN INSERT (id, f_name, l_name,role) VALUES (SOURCE.id, SOURCE.f_name, SOURCE.l_name, SOURCE.role);

合并后:

  select * from users;

输出:

id f_name l_name role
1 John Nathan 1
2 Brand Ba 1
3 Bob Do 2
4 Alice Sia 1

db<>fiddle here

如果您只想合并角色 1 的人员:

架构和插入语句:

 create table people( id int ,f_name  varchar(25), l_name varchar(25),role  int);
 insert into people values( 1    ,'John', 'Nathan', 1);     
 insert into people values( 2    ,'Brand','Ba'    , 1);     
 insert into people values( 3    ,'Bob',  'Do'    , 2);     
 insert into people values( 4    ,'Alice','Sia'   , 1);     
 
 
 create table Users( id int,  f_name varchar(25), l_name varchar(25), role int);
 insert into Users values( 1    ,'John' ,'Tom' ,1 );

合并查询:

 MERGE Users AS TARGET
 USING (select * from people where role=1) AS SOURCE 
 ON (TARGET.id = SOURCE.id ) 
 --When records are matched, update the records 
 WHEN MATCHED 
 THEN UPDATE SET TARGET.f_name = SOURCE.f_name, TARGET.l_name = SOURCE.l_name , TARGET.role=SOURCE.role
 --When no records are matched, insert the incoming records from source table to target table
 WHEN NOT MATCHED BY TARGET 
 THEN INSERT (id, f_name, l_name,role) VALUES (SOURCE.id, SOURCE.f_name, SOURCE.l_name, SOURCE.role);

合并后:

 select * from users;

输出:

id f_name l_name role
1 John Nathan 1
2 Brand Ba 1
4 Alice Sia 1

db<>fiddle here