Kueri berikut tidak valid dengan ONLY_FULL_GROUP_BY
diaktifkan. Yang pertama tidak valid karena nama dalam daftar pilih tidak disebutkan dalam GROUP BY
klausa
mysql> SELECT name, MAX(age) FROM t;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...)
tanpa kolom GROUP adalah ilegal jika tidak ada klausa GROUP BY
Anda dapat menulis ulang kueri agar berfungsi dengan baik sebagai
mysql> SELECT name, MAX(age) FROM t GROUP BY name;
atau
Matikan ONLY_FULL_GROUP_BY dan kesalahan harus hilang.
Tautan dapat membantu Anda
- Anda dapat mencari kesalahan MySQL di sini
- grup demi fungsi
- pos serupa di stackoverflow.com
- forum lain yang membahas masalah serupa
- server-sql-mode
PERBARUI
Ini adalah jawaban atas komentar Anda.
But i would like to know more about disabling the Group BY mode in mysql db.
-
Server MySQL dapat beroperasi dalam mode SQL yang berbeda, dan dapat menerapkan mode ini secara berbeda untuk klien yang berbeda, tergantung pada nilai
sql_mode
variabel sistem. Kemampuan ini memungkinkan setiap aplikasi untuk menyesuaikan mode operasi server dengan kebutuhannya sendiri. -
Untuk menyetel mode SQL saat memulai server, gunakan
--sql-mode="modes"
opsi pada baris perintah, atausql-mode="modes"
dalam file opsi sepertimy.cnf (Unix operating systems)
ataumy.ini (Windows)
. mode adalah daftar mode berbeda yang dipisahkan dengan koma. Untuk menghapus mode SQL secara eksplisit, setel ke string kosong menggunakan--sql-mode=""
pada baris perintah, atausql-mode=""
dalam file opsi. -
Untuk mengubah mode SQL saat runtime, gunakan
SET [GLOBAL|SESSION] sql_mode='modes'
pernyataan untuk mengatur variabel sistem sql_mode. Menyetel variabel GLOBAL memerlukan hak istimewa SUPER dan mempengaruhi pengoperasian semua klien yang terhubung sejak saat itu. Menyetel variabel SESSION hanya memengaruhi klien saat ini. Setiap klien dapat mengubah nilai sql_mode sesinya sendiri kapan saja. -
Untuk menentukan nilai sql_mode global atau sesi saat ini, gunakan pernyataan berikut:
SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;
-
Anda dapat merujuk ke tabel sql_mode
I followed the manuals, Added the ONLY_FULL_GROUP_BY in sql-mode
but no difference.
Ini terjadi karena versi MySQL. Apa versi MySQL dari komputer lokal Anda?
Bagaimana cara memeriksa versi MySQL?
mysql> SELECT version();
+-----------+
| version() |
+-----------+
| 5.5.28 |
+-----------+
1 row in set (0.00 sec)
Untuk menguji sql_mode ONLY_FULL_GROUP_BY
, saya membuat tabel patient
dengan dua kolom id, name
dan catatan yang dimasukkan. Ingat sql_mode ONLY_FULL_GROUP_BY
tidak diatur secara default, Anda perlu mengaturnya jika Anda mau.
1) Versi MySQL 5.0.45-community-nt
SELECT name, MAX(id) FROM patient;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
Gagal, tidak ada gunanya menyetel sql_mode ke ONLY_FULL_GROUP_BY
karena tidak akan mengizinkan kolom nonagregat yang tidak disebutkan dalam klausa GROUP BY.
2) Versi MySQL 5.1.40-komunitas
mysql> SELECT name, MAX(id) from patient;
+----------+--------+
| MAX(id) | name |
+----------+--------+
| 33 | aniket |
+----------+--------+
1 row in set (0.03 sec)
Kemudian setelah mengatur sql_mode ONLY_FULL_GROUP_BY
mysql> set sql_mode = 'ONLY_FULL_GROUP_BY';
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT name, MAX(id) from patient;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
3) Versi MySQL 5.5.28
mysql> SELECT name, MAX(id) from patient;
+----------+--------+
| MAX(id) | name |
+----------+--------+
| 33 | aniket |
+----------+--------+
1 row in set (0.03 sec)
Kemudian setelah mengatur sql_mode ONLY_FULL_GROUP_BY
mysql> set sql_mode = 'ONLY_FULL_GROUP_BY';
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT name, MAX(id) from patient;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
Kesimpulan
Seperti yang Anda lihat, kueri gagal pada versi 5.0.45, dan berhasil pada/setelah 5.1.40 dan 5.5.28Sebelum versi MySQL 5.1.10(tidak yakin)
kueri tanpa GROUP BY
gagal terlepas dari sql_mode ONLY_FULL_GROUP_BY
ditetapkan atau tidak.
Beberapa bug menarik dan tautan faq sql_mode
- ONLY_FULL_GROUP_BY mode sql terlalu membatasi
- sql-mode:hanya grup penuh berdasarkan mode yang tidak berfungsi
- FAQ MySQL 5.0:Mode SQL Server