Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk Memaparkan Medan dalam Klausa WHERE dengan GROUP BY dalam MySQL?

Bagaimana untuk Memaparkan Medan dalam Klausa WHERE dengan GROUP BY dalam MySQL?

Barbara Streisand
Barbara Streisandasal
2024-11-07 06:13:03568semak imbas

How to Display a Field in the WHERE Clause with GROUP BY in MySQL?

Pertanyaan SQL dengan Klausa WHERE untuk Medan Khusus

Masalah Awal:

Dalam MySQL, anda tidak dapat memaparkan data medan jadual pangkalan data dalam klausa WHERE pertanyaan apabila medan lain yang tidak disertakan dalam klausa WHERE juga terdapat dalam klausa GROUP BY pertanyaan. Khususnya:

<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>

Penyelesaian Cadangan:

Malangnya, had ini tidak boleh diatasi secara langsung dalam MySQL. Walau bagaimanapun, terdapat strategi alternatif untuk mencapai hasil yang diingini:

Penyelesaian 1: Subkueri

Buat subkueri untuk mendapatkan semula data medan yang dikehendaki:

<code class="sql">SELECT userID, userHabilitado
FROM cursosUsuarios
WHERE userID = 70</code>

Kemudian, sertai subkueri ini dengan pertanyaan utama menggunakan medan yang sesuai:

<code class="sql">SELECT cursos.cursoID AS idcurso, cursos.estadoCurso,
(SELECT userHabilitado 
 FROM cursosUsuarios 
 WHERE userID = 70) AS 'userHabilitado',                              
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>

Penyelesaian 2: Pertanyaan Bersarang

Rumuskan semula pertanyaan menggunakan pertanyaan bersarang:

<code class="sql">SELECT idcurso, estadoCurso, 'userHabilitado'
FROM (
  SELECT cursoID AS idcurso, estadoCurso, userHabilitado
  FROM cursos LEFT JOIN cursosUsuarios
  ON cursos.cursoID = cursosUsuarios.cursoID
  WHERE cursos.estadoCurso='abierto'
  GROUP BY cursoID
) AS subquery
WHERE userHabilitado = 1;</code>

Kedua-dua penyelesaian ini membolehkan anda memaparkan data medan userHabilitado untuk pengguna tertentu dalam klausa WHERE sambil memasukkan medan lain dalam klausa GROUP BY.

Atas ialah kandungan terperinci Bagaimana untuk Memaparkan Medan dalam Klausa WHERE dengan GROUP BY dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn