Rumah > Artikel > pangkalan data > Bagaimana untuk Memohon Klausa WHERE ke Medan Khusus dalam Subkueri MySQL dan Fungsi Agregat?
Adakah Terdapat Cara untuk Memaparkan Klausa WHERE untuk Medan Khusus dalam MySQL?
Dalam MySQL, secara amnya tidak mungkin untuk menentukan Klausa WHERE untuk medan tertentu dalam subkueri atau fungsi agregat. Walau bagaimanapun, terdapat penyelesaian dan teknik tertentu yang boleh membantu mencapai hasil yang serupa.
Penghadan Klausa WHERE dalam Subkueri dan Fungsi Agregat
Secara lalai, klausa WHERE tidak boleh digunakan kepada lajur bukan agregat dalam subkueri atau fungsi agregat. Ini kerana MySQL menganggap lajur ini sebagai tidak ditentukan untuk setiap kumpulan, yang membawa kepada hasil yang bercanggah. Contohnya:
<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>
Pertanyaan di atas, yang mendapatkan semula kursus dan maklumat pendaftaran pengguna, tidak boleh memasukkan klausa WHERE untuk pengguna tertentu:
<code class="sql">WHERE usuarios.userID = 70</code>
Penyelesaian dan Pendekatan Alternatif
Untuk mencapai hasil yang diinginkan, pertimbangkan perkara berikut pendekatan:
Contoh menggunakan CTE (Common Table Ungkapan):
Pertanyaan berikut menggunakan CTE untuk pra-menapis data pendaftaran pengguna sebelum menggunakan fungsi agregat:
<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>
Dalam contoh ini, jadual cursosUsuarios ditapis menggunakan CTE untuk hanya memasukkan rekod untuk pengguna yang ditentukan, yang membenarkan paparan yang betul bagi medan userHabilitado.
Atas ialah kandungan terperinci Bagaimana untuk Memohon Klausa WHERE ke Medan Khusus dalam Subkueri MySQL dan Fungsi Agregat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!