我有一个表,其中包含User_ID和Role之间的关系。 User_ID可以有很多角色。
我有另一张表有原始ID(以及其他一些信息)。
我需要编写一个批量摄取类型的东西,它将搜索Table1中的所有ID,如果Table2中没有具有角色“1”的ID,则插入它。我有这样的事情:
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表中得到了重复的条目。
答案 0 :(得分:2)
您应该展开not exists
检查以同时验证user_id
和role_id
:
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
)
否则,即使对于已经处于“1”角色的用户,您也会添加“1”角色。
答案 1 :(得分:0)
我会尝试用
替换你的where语句WHERE ID NOT IN(从jsec_user_role_rel中选择user_id)