SQL-запрос уникальной вставки - PullRequest
1 голос
/ 25 марта 2011

У меня есть таблица, которая имеет отношение между User_ID и ролью.У User_ID может быть много ролей.

У меня есть другая таблица, в которой есть идентификаторы оригинала (и некоторая другая информация).

Мне нужно написать что-то вроде массового приема, которое будет искать через все идентификаторы.в таблице 1, и если в таблице 2 нет строки с таким идентификатором с ролью «1», вставьте ее.У меня есть что-то вроде этого:

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 ]

2 голосов
/ 25 марта 2011

Вы должны расширить проверку 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 "роль.

0 голосов
/ 25 марта 2011

Я бы попробовал заменить оператор where на

WHERE ID NOT IN (выберите user_id из jsec_user_role_rel)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...