Запрос для проверки отношений между столбцами?

В настоящее время у меня есть таблица с именем User_Followers, в этой таблице есть следующие столбцы:

ID пользователя Follower_Id

Я пытаюсь создать запрос, который будет получать всех людей, за которыми следит пользователь, но за которыми не следуют.

Например:

User ID | Follower ID

1              2
1              4
3              1
4              2
4              3

В приведенном выше примере, если бы я должен был проверить пользователей, не подписавшихся на пользователя 4, он должен вернуть 1.

Точно так же, если бы я должен был проверить пользователей, не следующих за пользователем 2, он должен вернуть 1 и 4.

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
0
29
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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
                 );
SELECT User_Id FROM User_Followers WHERE User_Id NOT IN (SELECT User_Id FROM User_Followers WHERE Follower_Id = @FollowerId) тоже работает?
Paul 02.05.2019 14:07

@Paul.F-G скорее WHERE User_Id NOT IN (SELECT Follower_Id ... Проверьте мой ответ, но ответ Гордона хорош (мой плюс), у меня всегда наивный подход

Cid 02.05.2019 14:13

@Paul.F-G . . . Я бы настоятельно не рекомендовал вам использовать NOT IN с подзапросом. Это не работает, как вы ожидаете, если Любые возвращаемых значений равно NULL. Хотя это может сработать в этой ситуации, вы можете столкнуться с проблемами в будущем. Просто используйте NOT EXISTS.

Gordon Linoff 02.05.2019 14:15

У вас есть 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 = ?
)

Другие вопросы по теме