2010-05-18 23 views
11

Por lo x esCuando es `X no es null` no el mismo que` NO (X es NULL) `

La expresión x IS NOT NULL es no es igual a NOT(x IS NULL), como es el caso en 2VL

(cita de this answer, que se cita a Fabian Pascal las cuestiones prácticas de Base de Datos - una referencia para el practicante Pensamiento - cerca del final de esta respuesta)

Supongo que cuando x IS NULL es NULL, pero no puedo adivinar cuándo sería (es decir No he verificado el estándar SQL). Esta suposición fue incorrecta.

Respuesta

15

Por lo que he leído, Fabian Pascal no se está refiriendo a un valor escalar en com parison a Null pero el tipo ROW raramente implementado. En el estándar, la idea era que podía comparar una tabla (de filas) usando IS NULL para determinar si todos los valores se establecieron en el valor NULO. Por lo tanto, X IS NULL implicaría que todos los valores se establecieron en el valor NULL, X IS NOT NULL significa que no se establecieron valores en el valor NULL y NOT (X IS NULL) significa que no todos los valores se establecieron en el valor NULL o, dicho de otra manera, existía al menos uno valor no establecido en NULL. Por supuesto, estoy caminando ligeramente sobre los hombros de los gigantes aquí, pero así es como interpreto su declaración.

+1

Tanto Date como Pascal pueden ser culpados por no haber escrito esto claramente. Si x es una fila con una mezcla de nulos y no nulos, tiene un extraño estado de confusión. –

10

x IS NULL nunca habrá NULL por lo que son los mismos para toda la tabla de x

Verdad ahoy:

+--------+-------------+---------+--------------+ 
| x |x IS NOT NULL|x IS NULL|NOT(x IS NULL)| 
+--------+-------------+---------+--------------+ 
|NULL | FALSE | TRUE | FALSE  | 
|NOT NULL| TRUE  | FALSE | TRUE  | 
+--------+-------------+---------+--------------+ 

Tenga en cuenta que las columnas dos y cuatro son idénticos para todos los valores posibles de x (ya sea NULL o NOT NULL)

+0

+1 para usar una tabla de verdad. – EndangeredMassa

+0

Dada la respuesta de Thomas, parece que mi 'x IS NULL' * es * NULL es una pista falsa. Perdón por desviarte. –

Cuestiones relacionadas