Скажем, у меня есть две таблицы
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.
Iнужно запросить имя и фамилию любого пользователя, который НЕ имеет 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".
Есть ли способ иметь тип соединения и условия соединения, чтобы отфильтровать строки, которые я хочу здесь опустить?Или мне нужен подзапрос?