Соединение SQL на one-many отношении, где ни один из многих не соответствует данному значению

Скажите, что у меня есть две таблицы

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".

Существует ли способ иметь тип соединения, и условия объединения отфильтровывают строки, которые я хочу покинуть здесь? Или мне нужен подзапрос?

5
задан Jacob Mattison 20 July 2010 в 20:58
поделиться