insert into Permission (UserID, perm, Login) select UserID, 0, Login from Users
会发生什么:跨表复制数据并插入0作为'perm'列的默认值。但是,每次软件创建表单时,我都需要运行此代码。所以它不断添加它已有的一切。
解决方法:DELETE FROM Permission WHERE perm = 0 - 在运行插入代码之前。这将确保不删除Perm = 1的用户(允许更改内容的用户)。
问题:所以我在运行插入之前运行上面的删除代码。但由于它是一个频繁的例程,它将加倍已经包含在表Permissions中的用户(即:用户Admin将perm = 0,perm = 1)。无论如何都要检测用户是否已经存在并跳过它或什么东西?
答案 0 :(得分:1)
你能做的是
insert into Permission(UserID,perm,Login)
select UserID, 0, Login
from Users
where UserID NOT IN(select UserID from Permission);
基本上,如果它们不在那里,它会插入它们。
答案 1 :(得分:1)
这只会通过UserID和Login的组合插入不在Permission
表中的记录。如果将Login存储为冗余(非规范化数据),则单独使用UserID就足够了。
insert into Permission (UserID, perm, Login)
select U.UserID, 0, U.Login
from Users U
left join Permission P on P.UserID = U.UserID and P.Login = U.Login
where P.Login is null
权限矩阵通常以两种方式之一表示:
Perm
字段包含所有“允许”位的掩码答案 2 :(得分:1)
当然,这将只插入没有许可记录的记录。
INSERT INTO Permission (UserID, perm, Login)
SELECT u.UserID, 0, u.Login
FROM Users u
LEFT OUTER JOIN Permission p ON u.UserID = p.UserID
WHERE p.UserID IS NULL