Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 对这种计数行为的解释_Mysql - Fatal编程技术网

Mysql 对这种计数行为的解释

Mysql 对这种计数行为的解释,mysql,Mysql,我很难理解这种行为,有人能给我解释一下吗?我要检索的是所有家长用户ID,但没有他的孩子离开学校的家长escolarity.baja=1。在此表“escolarity”中,字段“baja”可以是“”、NULL、0或1。类似于“esc.baja!=1”的嵌入式选择部分表示用户尚未离开学校,但这并不排除字段“baja”中的1个值,但是如果我设置“esc.baja!=0”,则仅计算baja=1,并且仅当esc.baja=1时返回字段。 为什么会发生这种情况 SELECT user.id

我很难理解这种行为,有人能给我解释一下吗?我要检索的是所有家长用户ID,但没有他的孩子离开学校的家长escolarity.baja=1。在此表“escolarity”中,字段“baja”可以是“”、NULL、0或1。类似于“esc.baja!=1”的嵌入式选择部分表示用户尚未离开学校,但这并不排除字段“baja”中的1个值,但是如果我设置“esc.baja!=0”,则仅计算baja=1,并且仅当esc.baja=1时返回字段。 为什么会发生这种情况

    SELECT user.id
    FROM usuario as user 
    JOIN user_type as ut ON (ut.tipo=4 AND ut.id_usuario=user.id    ) 
    JOIN alumno_parent as prog ON prog.id_parent = user.id
    JOIN escolarity as esc ON prog.id_alumno = esc.id_alumno 
    WHERE 1 AND 
    # EMBEDDED select
        (SELECT COUNT(*) FROM alumno_parent as ap 
         JOIN user_type as ut1 ON (ut1.id_usuario=ap.id_alumno AND ut1.tipo = 1 ) 
         JOIN matric as mat ON (mat.id_alumno = ut1.id_usuario AND id_grupo = 464)
         JOIN escolarity as esc ON mat.id_alumno = esc.id_alumno   
         WHERE ap.id_parent = user.id AND esc.baja != 1 ) > 0 
    GROUP BY user.id ORDER BY user.apellido1, user.apellido2 , user.nombre;

我认为示例数据和期望的结果将真正帮助其他人理解您正在尝试做的事情。不要在同一查询/子查询中的表使用相同的别名(这很容易混淆和出错)-请参阅
esc
。此外,请记住,
esc.baja!=1
将排除字段baja中的所有空记录,当列中只有0、1和空时,本质上说是
esc.baja=0
——反过来说是
esc.baja!=0
表示
esc.baja=1
,不包括空值。总是(!)处理空值,或者至少考虑一下。