Rumah > pangkalan data > tutorial mysql > 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
Lepaskan: 2024-11-07 06:13:03
asal
669 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan