В настоящее время у меня есть таблица с именем User_Followers, в этой таблице есть следующие столбцы:
ID пользователя Follower_Id
Я пытаюсь создать запрос, который будет получать всех людей, за которыми следит пользователь, но за которыми не следуют.
Например:
User ID | Follower ID
1 2
1 4
3 1
4 2
4 3
В приведенном выше примере, если бы я должен был проверить пользователей, не подписавшихся на пользователя 4, он должен вернуть 1.
Точно так же, если бы я должен был проверить пользователей, не следующих за пользователем 2, он должен вернуть 1 и 4.






I'm trying to build a query that will retrieve all the people a user is following but no being followed back by.
Если я правильно понимаю, то not exists, кажется, делает то, что вы хотите:
select uf.user_id
from User_Followers uf
where uf.follower_id = @user and
not exists (select 1
from User_Followers uf2
where uf2.user_id = uf.follower_id and
uf2.follower_id = uf.user_id
);
@Paul.F-G скорее WHERE User_Id NOT IN (SELECT Follower_Id ... Проверьте мой ответ, но ответ Гордона хорош (мой плюс), у меня всегда наивный подход
@Paul.F-G . . . Я бы настоятельно не рекомендовал вам использовать NOT IN с подзапросом. Это не работает, как вы ожидаете, если Любые возвращаемых значений равно NULL. Хотя это может сработать в этой ситуации, вы можете столкнуться с проблемами в будущем. Просто используйте NOT EXISTS.
У вас есть 2 запроса:
"следят" можно записать так:
SELECT u.Follower_Id
FROM User_Followers u
WHERE u.User_Id = ?
"все люди, на которых подписан пользователь" можно сделать так:
SELECT u.User_Id
FROM User_Followers u
WHERE u.Follower_Id = ?
Теперь вы можете объединить оба запроса для выполнения "все люди, на которых подписан пользователь"и не"следят"
SELECT u.User_Id
FROM User_Followers u
WHERE u.Follower_Id = ?
AND u.User_Id NOT IN
(
SELECT uf.Follower_Id
FROM User_Followers uf
WHERE uf.User_Id = ?
)
SELECT User_Id FROM User_Followers WHERE User_Id NOT IN (SELECT User_Id FROM User_Followers WHERE Follower_Id = @FollowerId)тоже работает?