唯一插入SQL查询

时间:2011-03-24 21:21:01

标签: sql sql-server-2005

我有一个表,其中包含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表中得到了重复的条目。

2 个答案:

答案 0 :(得分:2)

您应该展开not exists检查以同时验证user_idrole_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)