唯一插入SQL查询
我有一个在用户ID和角色之间有关系的表。用户ID可以有许多角色 我有另一张表,上面有原始ID和一些其他信息 我需要编写一个大容量摄取类的东西来搜索表1中的所有ID,如果表2中没有一行具有角色1的ID,请插入它。我有这样的想法:唯一插入SQL查询,sql,sql-server-2005,Sql,Sql Server 2005,我有一个在用户ID和角色之间有关系的表。用户ID可以有许多角色 我有另一张表,上面有原始ID和一些其他信息 我需要编写一个大容量摄取类的东西来搜索表1中的所有ID,如果表2中没有一行具有角色1的ID,请插入它。我有这样的想法: INSERT INTO [jsec_user_role_rel] ([version] ,[role_id] ,[user_id]) SELECT 0, 1, id from jsec_user
INSERT INTO [jsec_user_role_rel]
([version]
,[role_id]
,[user_id])
SELECT 0, 1, id from jsec_user
WHERE not exists(select * from jsec_user_role_rel where user_id = id);
这似乎起到了作用,但我在jsec_user_role_rel表中得到了重复的条目 我会尝试用 如果ID不在jsec_user_role_rel中选择user_ID中,则应展开NOT exists检查以验证user_ID和role_ID:
否则,您甚至会为已经在1角色中的用户添加1角色。这是错误的,因为用户id可能在jsec_用户_角色_rel表中,但角色不同于1,那么为什么不在其中id不在从jsec_用户_角色_rel中选择用户id,其中role=1或任何必要的连接中,以获取该角色(如果该角色不在该表中)
insert [jsec_user_role_rel]
([version], [role_id], [user_id])
select distinct 0
, 1
, id
from jsec_user u
where not exists
(
select *
from jsec_user_role_rel ur
where ur.user_id = u.id
and ur.role_id = 1
)