Как получить не взаимные подписки?

Для того чтобы получить список не взаимных подписок в SQL, вы можете использовать операторы JOIN и NOT IN. Предположим, у вас есть две таблицы - "пользователи" и "подписки". Таблица "пользователи" содержит информацию о пользователях, а таблица "подписки" содержит информацию о том, кто подписан на кого.

Для начала, мы можем использовать оператор JOIN для объединения таблицы "подписки" с самой собой, чтобы найти всех пользователей, у которых есть взаимная подписка:

SELECT A.user_id, B.user_id
FROM подписки AS A
JOIN подписки AS B ON A.user_id = B.subscriber_id AND A.subscriber_id = B.user_id

Затем, чтобы найти все не взаимные подписки, мы можем использовать оператор NOT IN, чтобы исключить из этого списка пользователей, у которых есть взаимные подписки:

SELECT user_id
FROM пользователи
WHERE user_id NOT IN (
  SELECT A.user_id
  FROM подписки AS A
  JOIN подписки AS B ON A.user_id = B.subscriber_id AND A.subscriber_id = B.user_id
)

Этот запрос вернет список пользователей, у которых нет взаимных подписок. Вы можете заменить "пользователи" и "подписки" на соответствующие имена ваших таблиц в запросе.

Заметьте, что этот запрос может быть неэффективным для больших таблиц, поскольку он использует вложенный подзапрос. В таких случаях вы можете использовать временные таблицы или более сложные конструкции JOIN для оптимизации запроса.