У мене був запит (для Postgres та Informix) із NOT IN
пропозицією, що містить підзапит, який у деяких випадках повертає NULL
значення, внаслідок чого цей пункт (і весь запит) нічого не повертають.
Який найкращий спосіб зрозуміти це? Я вважав це NULL
як щось, що не має значення, і тому не очікував, що запит не вдасться, але, очевидно, це не правильний спосіб думати NULL
.
x <> NULL
це вирішує питанняFALSE
, ви можете розраховуватиNOT (x <> NULL)
на оцінкуTRUE
, а це не так. Обидва оцінюютьUNKNOWN
. Хитрість полягає в тому, що рядок вибирається лише в тому випадку, якщо вWHERE
пункті (якщо він присутній) оцінюється значенняTRUE
- рядок опущено, якщо цей пункт оцінюєFALSE
абоUNKNOWN
. Така поведінка (загалом і зокремаNOT IN
присудок) відповідає стандарту SQL.