在表格中有2列:userid
和roleid
。每个用户至少应有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的行?
答案 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