Запрос MySQL для вывода списка пользователей, которых нет в другой таблице

 id   username
| 1 | john
| 2 | mike
| 3 | Tim
| 4 | Jake
| 5 | Sam

follower_id    followed_id
|      1     |       3
|      1     |       4

Джон следует за Тимом и Джейком. Как мне вернуть список пользователей, за которыми подписан Джон нет?

Возможный дубликат Исключить записи, если совпадает правая таблица

Matt Raines 26.09.2018 22:56
Освоение архитектуры микросервисов с 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
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
1
190
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Попробуйте выполнить подзапрос, например:

SELECT id, username
FROM users
WHERE id NOT IN ( SELECT followed_id FROM follows WHERE follower_id = 1 )
Ответ принят как подходящий

Предположим, что имена таблиц как user и user_to_follower.

  • Начните с таблицы user и выполните LEFT JOIN с другой таблицей. Поскольку вы хотите учитывать всех пользователей, которые не подписаны на «Джон», вам необходимо сначала рассмотреть таблицу user.
  • Обратите внимание, что в LEFT JOIN переменная JOHN устанавливается f.follower_id = 1 в предложении ON.
  • Теперь просто отфильтруйте тех пользователей, у которых Follower_idis null.
  • Это решение на основе соединения более эффективно, чем использование подзапроса.

Попробуйте следующий запрос:

SELECT u.id, u.username 
FROM user AS u 
LEFT JOIN user_to_follower AS f ON f.followed_id = u.id 
                                   AND f.follower_id = 1 
WHERE f.follower_id IS NULL 

Ты мужчина! Спасибо.

user2709610 26.09.2018 17:19

@onosendi рад помочь :)

Madhur Bhaiya 26.09.2018 17:19

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

user2709610 26.09.2018 21:03

@onosendi, пожалуйста, создайте новый. На это можно ответить там

Madhur Bhaiya 26.09.2018 21:05

В основном LEFT JOIN, где объединенная таблица имеет значение NULL:

SELECT
u.*
FROM
 users u
LEFT JOIN follows f ON f.followed_id = u.id AND f.follower_id = 1
WHERE

 AND f.follower_id IS NULL

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