Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MySQL:Kesalahan SQL:1140, SQLState:42000

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

  1. Anda dapat mencari kesalahan MySQL di sini
  2. grup demi fungsi
  3. pos serupa di stackoverflow.com
  4. forum lain yang membahas masalah serupa
  5. 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.  

Mode SQL Server

  • 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, atau sql-mode="modes" dalam file opsi seperti my.cnf (Unix operating systems) atau my.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, atau sql-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

  1. ONLY_FULL_GROUP_BY mode sql terlalu membatasi
  2. sql-mode:hanya grup penuh berdasarkan mode yang tidak berfungsi
  3. FAQ MySQL 5.0:Mode SQL Server


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ukuran skema MySQL

  2. Bagaimana cara mengetahui URL MySQL, host, port, dan nama pengguna saya?

  3. Laravel Eloquent vs pembuat kueri - Mengapa menggunakan fasih untuk menurunkan kinerja

  4. Rata-rata data untuk setiap 5 menit dalam waktu yang ditentukan

  5. Menggunakan kata kunci SQL dalam judul tabel atau kolom