สมมติว่าฉันมีโต๊ะสองโต๊ะ
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"
มีวิธีให้ประเภทการรวมและเงื่อนไขการรวมกรองแถวที่ฉันต้องการละไว้ที่นี่หรือไม่ หรือฉันต้องการแบบสอบถามย่อย?