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