如果MySQL表中不存在,则添加一行

时间:2017-02-09 12:52:34

标签: mysql

在表格中有2列:useridroleid。每个用户至少应有roleid 4。目前有大约10,000条记录,但不知何故,少数用户没有这个角色。

视觉示例:

userid  |  roleid
1          1
1          4
2          1
2          4
3          1 <---------- userid 3 misses roleid 4!
4          1
4          4

当该组合不存在时,是否可以执行查询并添加带有userid和roleid的行?

2 个答案:

答案 0 :(得分:4)

insert into userRoles(userid, roleid)
    select userid, 4
    from userRoles
    group by userid
    having sum(roleid = 4) = 0;

sum(role = 4)子句中的having计算每个拥有4的用户的行数。 = 0表示没有。

注意:这为此表中的所有用户提供了4的角色ID。可能存在根本没有角色的用户。

如果您需要,请使用users表:

insert into userRoles(userid, roleid)
    select u.userid, 4
    from users u
    where not exists (select 1 from userRoles ur where ur.userid = u.userid);

答案 1 :(得分:0)

您应该搜索在roleID中没有4的用户

insert into yourTable ( userId, roledid)
select userid, 4
from yourTable 
where roleid <>4