mysql: not in (subconsulta), análisis y solución de valores Null en la subconsulta

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 = nullfuncionario dijo: "No puede usar operadores de comparación aritmética como =, < o <> para probar NULL", cualquier nullcomparación con el valor devolveránull而不是假值0。

         Al pedir calificaciones  not in (select 成绩 from score2), porque score2.成绩hay nullvalores, 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.

Supongo que te gusta

Origin blog.csdn.net/weixin_46707493/article/details/127132535
Recomendado
Clasificación