Katakanlah saya punya dua meja
User
-----
id
first_name
last_name
User_Prefs
-----
user_id
pref
Contoh data di User_Prefs mungkin
user_id | pref
2 | SMS_NOTIFICATION
2 | EMAIL_OPT_OUT
2 | PINK_BACKGROUND_ON_FRIDAYS
Dan beberapa pengguna mungkin tidak memiliki baris yang sesuai di User_Prefs.
Saya perlu menanyakan nama depan dan nama belakang pengguna mana pun yang TIDAK memiliki EMAIL_OPT_OUT sebagai salah satu baris User_Pref (mungkin banyak, mungkin tidak ada).
SELECT DISTINCT u.* from User u
LEFT JOIN User_Prefs up ON (u.id=up.user_id)
WHERE up.pref<>'EMAIL_OPT_OUT'
memberi saya semua orang yang memiliki setidaknya satu baris yang bukan "EMAIL_OPT_OUT", yang tentu saja bukan yang saya inginkan. Saya ingin semua orang tidak memiliki baris yang cocok dengan "EMAIL_OPT_OUT".
Apakah ada cara agar tipe gabungan dan kondisi gabungan memfilter baris yang ingin saya tinggalkan di sini? Atau apakah saya memerlukan sub-kueri?