puntuación1:
puntuación2:
Cuando a menudo usamos condiciones de filtro de la cláusula not in in where, como:
Consultar los datos cuya puntuación score1 no está en la puntuación score2:
seleccione * de la puntuación1 donde la puntuación no está (seleccione la puntuación de la puntuación2);
Se puede encontrar que el resultado de retorno de where es todo False, incluso si no existe en la subconsulta, aún devuelve False ,
Los resultados de la consulta son los siguientes:
En la tabla se puede ver que hay datos con una puntuación de 77 en score1 y no en la tabla score of score2, pero el resultado de la consulta está vacío;
Usamos: seleccione 77 en (seleccione puntaje de puntaje2); intente ver los resultados devueltos.
Y: seleccione 88 en (seleccione puntaje de puntaje2);
Como se puede ver en lo anterior, 77 not in devuelve un valor nulo, mientras que 88 not in devuelve un valor 0;
El resultado de 88 not in es 0, es decir, el valor falso está en línea con nuestras expectativas, y 77 not in debe devolver 1, es decir, el valor verdadero, pero devuelve un valor Nulo , lo que da como resultado un valor falso.
razón:
Cuando se usa in, el proceso de implementación específico es comparar cada valor con cada valor en el conjunto de resultados. Cuando juzga cualquier valor, el a = null
funcionario dijo: "No puede usar operadores de comparación aritmética como =, < o <> para probar NULL", cualquier null
comparación con el valor devolveránull而不是假值0。
Al pedir calificaciones not in (select 成绩 from score2)
, porque score2.成绩
hay null
valores, el resultado de 77 en (88,82,88,93, nulo) es (0,0,0,0, nulo) ,当集合中只有0与null时,程序会返回null而不是0假值,取not仍然为null;而88 not in 中仍然返回0,原因在于如88
en (88,82,88,93, nulo) El resultado es (1,0,1,0, nulo),则含有真值则覆盖null返回真值,然后取 not 才得到0的假值结果。
resolver:
Solo necesita agregar es juicio nulo sobre la base de no estar, de la siguiente manera:
A partir del análisis anterior, podemos ver que cuando el mensaje no incluido que queremos devuelve un valor verdadero, devolverá un valor nulo, y el mensaje no incluido que queremos devuelve un valor falso y aún devuelve 0, por lo que solo necesitamos agregar el juicio es nulo .
Nota: Primero, debe determinar si la subconsulta contiene valores nulos.