SQL:如果不存在则更新,否则删除

Vip*_*rus 5 sql sql-server not-exists sql-update sql-delete

我目前正在尝试编写一个脚本,将用户的角色更改为另一个,而不会在 SQL Server 数据库中创建重复项。

例如:

User_ID      Role_ID
---------------------
A            X
A            Z
B            Y
C            X
C            Y
D            Y
Run Code Online (Sandbox Code Playgroud)

用户可能有多个角色。

我想更改它,以便角色 Y 中的所有用户现在都是角色 X 的成员,角色 Y 将不再存在:

User_ID      Role_ID
---------------------
A            X
A            Z
B            X
C            X
D            X
Run Code Online (Sandbox Code Playgroud)

通过将所有 Y 角色更新为 X,这可能会创建重复值;因此我只需要在新值不存在时更新,否则只需删除此值

Kaf*_*Kaf 3

试试这个(SQL 演示

--Delete records with X if same user has Y 
delete t1
from userRoles t1 join (
    select * from userRoles t2 where t2.role_id = 'y') t3
    on t1.user_id = t3.user_Id
where t1.role_id = 'x'

--Update all Y records to X
update userRoles set role_id = 'X'
where role_id = 'y'

select * from userRoles
--RESULTS
USER_ID ROLE_ID
A         X
A         Z
B         X
C         X
D         X
Run Code Online (Sandbox Code Playgroud)