Скажем, у меня есть две таблицы
User
-----
id
first_name
last_name
User_Prefs
-----
user_id
pref
Примеры данных в User_Prefs могут быть
user_id | pref
2 | SMS_NOTIFICATION
2 | EMAIL_OPT_OUT
2 | PINK_BACKGROUND_ON_FRIDAYS
А у некоторых пользователей могут отсутствовать соответствующие строки в User_Prefs.
Мне нужно запросить имя и фамилию любого пользователя, который НЕ имеет EMAIL_OPT_OUT в качестве одной из своих (возможно, многих, возможно, ни одной) строк User_Pref.
SELECT DISTINCT u.* from User u
LEFT JOIN User_Prefs up ON (u.id=up.user_id)
WHERE up.pref<>'EMAIL_OPT_OUT'
дает мне всех, у кого есть хотя бы одна строка, отличная от «EMAIL_OPT_OUT», что, конечно, не то, что мне нужно. Мне нужны все, у кого нет строк, соответствующих «EMAIL_OPT_OUT».
Есть ли способ, чтобы тип соединения и условия соединения отфильтровывали строки, которые я хочу оставить здесь? Или мне нужен подзапрос?