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>
この例では、CTE を使用して cursosUsuarios テーブルがフィルタリングされ、指定されたユーザーのレコードのみが含まれるため、userHabilitado フィールドを正しく表示できます。
以上がMySQL サブクエリおよび集計関数の特定のフィールドに WHERE 句を適用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。