有沒有辦法在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中文網其他相關文章!