2017-02-09 40 views
1

在表格内有2列:useridroleid。每个用户应至少有roleid 4。目前大约有10.000条记录,但不知何故少量用户不具备此角色。如果它不存在于MySQL表中,则添加一行

视觉例如:

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

是否有可能执行查询,并添加与用户ID和角色ID行时该组合不存在?

回答

4

是的。

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

having子句中的sum(role = 4)计算行对于具有4每个用户的数量。 = 0说没有。

注意:这为该表中的所有用户提供了角色ID 4.可能有用户根本没有任何角色。

如果你想他们,然后用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); 
0

您要搜索的用户有没有角色ID

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