Выберите все подписки, чьи пользователи не имеют других активных подписок - PullRequest
0 голосов
/ 02 мая 2019

Я пишу запрос на очистку подписки, в котором должны быть выбраны все отмененные подписки, у которых у пользователей нет других активных подписок (приложение допускает несколько подписок на пользователя).

Я начал с этого:

SELECT * FROM subscriptions s WHERE status = 'canceled' AND (SELECT COUNT(*) FROM subscriptions s2 where s2.user_id = s.user_id AND status = 'active') = 0;

Однако я чувствую, что должен быть более простой / более простой / более производительный способ.

1 Ответ

2 голосов
/ 02 мая 2019

NOT EXISTS может быть более интуитивно понятным:

SELECT * FROM subscriptions s WHERE status = 'canceled' 
AND NOT EXISTS 
(SELECT id FROM subscriptions s2 where s2.user_id = s.user_id AND status = 'active');

Вы также можете использовать LEFT JOIN здесь:

SELECT * 
FROM 
subscriptions s LEFT OUTER JOIN
subscriptions s2 ON s.USER_ID = s2.USER_ID AND s2.status='active'
WHERE status = 'canceled' AND s2.id IS NULL 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...