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 필드가 올바르게 표시됩니다.
위 내용은 MySQL 하위 쿼리 및 집계 함수의 특정 필드에 WHERE 절을 적용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!