ホームページ > データベース > mysql チュートリアル > MySQL サブクエリおよび集計関数の特定のフィールドに WHERE 句を適用する方法

MySQL サブクエリおよび集計関数の特定のフィールドに WHERE 句を適用する方法

DDD
リリース: 2024-11-05 15:38:02
オリジナル
445 人が閲覧しました

How to Apply a WHERE Clause to a Specific Field in MySQL Subqueries and Aggregate Functions?

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>
ログイン後にコピー

回避策と代替アプローチ

望ましい結果を達成するには、次のアプローチを検討してください。

  • IN 演算子を使用したサブクエリ: サブクエリ内の非集約 WHERE 句を置き換えます。 IN 演算子を使用して、セカンダリ テーブルから特定のユーザー ID を選択します。
  • CTE (共通テーブル式): CTE を使用して、集計関数を適用する前にデータを事前にフィルタリングします。これにより、特定のフィールドに WHERE 句を含めることができます。
  • 動的 WHERE 句の構築: 連結を使用して、ユーザー入力またはその他のパラメータに基づいて WHERE 句を動的に構築します。

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート