Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
唯一插入SQL查询_Sql_Sql Server 2005 - Fatal编程技术网

唯一插入SQL查询

唯一插入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

我有一个在用户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
    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
        )