2013-03-28 2 views
1

У меня есть две таблицы, пользователь и роль, один пользователь может иметь более чем 1 рольMysql исключает запись

user: ID | FIRSTNAME | LASTNAME | etc.. 
     1 | PETER  | Blomp | 


role: ID | ROLEID | USERID (which is user ID) 
     70 | 5  | 1 (peter) 
     71 | 2  | 1 

Что я должен делать, и не могут понять, есть, как можно получить данные о пользователи whos roleid не даже для некоторого целого числа, для. ех. Пользователь PETER может иметь Идентификатор роль-х 5 и 2, то, что я пытаюсь получить, что если Петр Идентификатор роли 3, он исключает из результирующих, независимо от того, если он Идентификатора роли 5.

+1

Вы должны использовать NOT IN (sub query) –

ответ

1
SELECT 
    user.ID, user.FirstName, user.LastName 
FROM 
    user 
WHERE 
    user.ID NOT IN (
        SELECT ID FROM role WHERE role.RoleID = '3' 
        ) 

В MySQL используется то, что называется subquery. Подзапрос в предложении WHERE выберет все идентификаторы (например, Peter), у которых есть идентификатор RoleID, равный 3. Затем он будет исключать эти идентификаторы (Peter), используя NOT IN(), из списка пользователей.

+0

Спасибо;)! работает как шарм – steelseriesmm

0

вы можете просто использовать NOT IN

select * from user inner join role on role.userid = user.id 
user.ID NOT IN (SELECT ID FROM role WHERE role.RoleID = '3') 
+0

Если у Peter есть роли 3 и 5, это все равно будет выбрано Peter как роль. 5. Пользователь попросил, чтобы он не выбрал Peter вообще, если роль 3 является любой из его ролей. –

+0

Спасибо, что расчистил его, Джон, что именно я считаю – steelseriesmm

+0

@steelseriesmm обновил мой ответ –

Смежные вопросы