2016-10-13 3 views
1

Скажем, у меня есть таблица участников каналапроверка SQL, если значение существует в группе

channelID | accountID | role 
------------------------ 
1   | Bob | 100 
2   | Bob | 100 
1   | Dave | 101 

и другую таблицу каналов

channelID | channelName  | type 
--------------------------------------- 
1   | Public Channel | public 
2   | Private Channel | private 

Как бы я идти о получении каналов, которые пользователь не находится в которые являются общедоступными?

Я попытался это сделать, но не могу понять, как группировать таблицу членов канала, поскольку есть два элемента с channelID 1, поэтому, когда я выполняю свой запрос, если я ищу с пользователем Dave, я получаю канал 1 в результате, когда он не должен возвращать ничего , Мой запрос, который я использую:

Select ChatChannels.channelID, channelName, type 
From ChatChannels 
INNER JOIN ChatChannelMembers 
On ChatChannels.channelID = ChatChannelMembers.channelID 
Where AccountID = 'Dave' 

ответ

2

Это работает?

SELECT (stuff) 
FROM ChatChannels CC 
WHERE CC.type = 'Public' 
    AND CC.channelID NOT IN (SELECT channelID FROM ChatChannelMembers WHERE AccountID = 'Dave') 
+0

В противном случае ваш запрос не будет иметь тот же результат, что и мой запрос. То, что я хочу предоставить запросу, - это список общедоступных каналов и что пользователь не указан в таблице channelMembers. Не знаете, что вы можете сделать с sql? Может потребоваться обработать на стороне клиента? – user2782582

+0

Работает ли этот обновленный запрос? – CptMisery

+0

да! именно то, что я ищу спасибо! – user2782582

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