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