Используйте NOT EXISTS: он выбирает продавцов, для которых отсутствует запись в таблице блокировок. Уникальный индекс по blocked.seller_id полезен и для корректности, и для поиска.
Есть таблица со всеми продавцами и отдельная таблица только с заблокированными продавцами. Как бы ты одним запросом получил список незаблокированных продавцов?
Используйте NOT EXISTS: он выбирает продавцов, для которых отсутствует запись в таблице блокировок. Уникальный индекс по blocked.seller_id полезен и для корректности, и для поиска.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Используйте NOT EXISTS: он выбирает продавцов, для которых отсутствует запись в таблице блокировок. Уникальный индекс по blocked.seller_id полезен и для корректности, и для поиска.
Пример схемы sellers(id, name) и blocked_sellers(seller_id):
SELECT s.id, s.name
FROM sellers s
WHERE NOT EXISTS (
SELECT 1
FROM blocked_sellers b
WHERE b.seller_id = s.id
);
Если блокировка имеет срок или статус, добавьте условие её активности внутри подзапроса. Альтернатива — LEFT JOIN с проверкой отсутствующего ключа. NOT IN требует осторожности при NULL в подзапросе; NOT EXISTS прямо выражает нужную проверку.