2015-10-02 4 views
0

Итак, у меня есть две таблицы, одна из которых называется cmdr_group и одна называется groupUser. Я пытаюсь получить список всех групп, в которых этого пользователя нет, что довольно сложно. GroupUser имеет несколько пользователей для каждой группы, каждая из которых имеет свой собственный идентификатор.Где не равен матрице подстрок

Теперь я понимаю, почему этот запрос не будет работать, но я помещаю его здесь, чтобы продемонстрировать мой мыслительный процесс.

SELECT t1.*, t2.userID 
FROM cmdr_group t1 
LEFT JOIN groupUser t2 ON t2.groupID = t1.ID 
WHERE t1.ID != (SELECT groupID FROM groupUser WHERE userID=90792652); 

Если вам нужна какая-либо информация о том, что находится в таблицах, просто дайте мне знать.

+0

просто измените! = НЕ IN. Таким образом, условие условия должно быть: WHERE t1.ID NOT IN (SELECT groupID FROM groupUser WHERE userID = 90792652); –

+0

"подстрока массива"? А? если подзапрос возвращает несколько значений, тогда вы должны использовать 'not in', а не'! = '. –

+0

Что значит «имеет несколько пользователей для каждой группы»? Предоставьте некоторые образцы данных. –

ответ

1

Теперь я думаю, что понимаю. Я хотел бы подойти к этому с помощью not exists или not in:

select g.* 
from cmdr_group g 
where not exists (select 1 
        from groupuser gu 
        where gu.userID = 90792652 and 
         gu.groupId = g.Id 
       ); 

Этот запрос следует в основном на ваш вопрос. Общий запрос - выборка всех групп. not exists просто проверяет, что пользователь не находится в группе.

+0

Возможно, это должен быть комментарий вместо ответа? –

+0

@devlincarnate. , , Я полностью изменил ответ. –

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