Показать пользователей, которые не делали ставки

Есть две таблицы :

bets

user_id bet_id bet_placed_date bet_amount

users user_id created_date country_name phone_number

    SELECT u.user_id, b.bet_id FROM users AS u
    LEFT JOIN bets AS b
    ON u.user_id = b.user_id 
    WHERE u.user_id NOT IN (SELECT user_id FROM bets)

Нужно написать запрос, который оставляет только тех пользователей, которые не поставили ни одной ставки


Ответы (1 шт):

Автор решения: teran
 SELECT u.user_id
 FROM users AS u
 LEFT JOIN bets as b ON (u.user_id = b.user_id)
 WHERE b.bet_id IS NULL

После левого джойна ставок к юзерам, у вас у непоставиших ставки bet_id всегда будет NULL, по нему и отфильтровать.

Для варианта с user_id not IN (select distint user_id from bets) джойн ставок по сути не имеет смысла, и работать он будет медленнее, чем вышеупомянутый джойн+фильтрация

→ Ссылка