有没有办法在MySQL中显示特定字段的WHERE子句?
在MySQL中,通常无法指定一个用于子查询或聚合函数中特定字段的 WHERE 子句。但是,有一些解决方法和技术可以帮助实现类似的结果。
子查询和聚合函数中 WHERE 子句的限制
默认情况下,无法应用 WHERE 子句子查询或聚合函数中的非聚合列。这是因为 MySQL 将每个组的这些列视为未定义,从而导致结果冲突。例如:
<code class="sql">SELECT cursos.cursoID AS idcurso, cursos.estadoCurso, cursosUsuarios.userHabilitado AS 'ok', GROUP_CONCAT(cursosUsuarios.userID SEPARATOR ',') AS 'usuarios' FROM cursos LEFT JOIN cursosUsuarios ON cursos.cursoID = cursosUsuarios.cursoID LEFT JOIN usuarios ON cursosUsuarios.userID = usuarios.userID WHERE cursos.estadoCurso = 'abierto' GROUP BY cursos.cursoID;</code>
上面的查询检索课程和用户注册信息,不能包含特定用户的 WHERE 子句:
<code class="sql">WHERE usuarios.userID = 70</code>
解决方法和替代方法
要获得所需的结果,请考虑以下方法:
使用 CTE(通用表表达式)的示例:
以下查询在应用聚合函数之前使用 CTE 预过滤用户注册数据:
<code class="sql">WITH FilteredEnrollments AS ( SELECT userID, cursoID, userHabilitado FROM cursosUsuarios WHERE userID = 70 ) SELECT cursos.cursoID AS idcurso, cursos.estadoCurso, FilteredEnrollments.userHabilitado AS 'ok', GROUP_CONCAT(FilteredEnrollments.userID SEPARATOR ',') AS 'usuarios' FROM cursos LEFT JOIN FilteredEnrollments ON cursos.cursoID = FilteredEnrollments.cursoID WHERE cursos.estadoCurso = 'abierto' GROUP BY cursos.cursoID;</code>
在此示例中,cursosUsuarios 表使用 CTE 进行过滤,仅包含指定用户的记录,从而可以正确显示 userHabilitado 字段。
以上是如何将 WHERE 子句应用于 MySQL 子查询和聚合函数中的特定字段?的详细内容。更多信息请关注PHP中文网其他相关文章!