ฉันมีแบบสอบถาม (สำหรับ Postgres และ Informix) ที่มีส่วนNOT IN
คำสั่งย่อยที่มีแบบสอบถามย่อยในบางกรณีที่ส่งคืนNULL
ค่าทำให้ส่วนคำสั่งนั้น (และแบบสอบถามทั้งหมด) ไม่สามารถส่งคืนสิ่งใดได้
วิธีที่ดีที่สุดที่จะเข้าใจสิ่งนี้คืออะไร? ฉันคิดว่าNULL
เป็นสิ่งที่ไม่มีค่าและดังนั้นจึงไม่ได้คาดหวังแบบสอบถามที่จะล้มเหลว NULL
แต่เห็นได้ชัดว่าไม่ใช่วิธีที่ถูกต้องที่จะคิดว่า
x <> NULL
ว่าแก้ปัญหาFALSE
คุณคาดว่าNOT (x <> NULL)
จะได้รับการประเมินTRUE
และไม่ได้รับการแก้ไข ทั้งUNKNOWN
ประเมิน เคล็ดลับคือว่าแถวที่เลือกเท่านั้นถ้าWHERE
ข้อ (ถ้ามี) ประเมินTRUE
- แถวถูกละไว้ถ้าประเมินข้ออย่างใดอย่างหนึ่งหรือFALSE
UNKNOWN
พฤติกรรมนี้ (โดยทั่วไปและสำหรับภาคNOT IN
แสดงโดยเฉพาะ) ได้รับคำสั่งจากมาตรฐาน SQL