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