Saya menggunakan MySQL 5.7.13 dengan pelayan WAMP pada PC Windows
Masalah saya ialah apabila melaksanakan pertanyaan ini
SELECT * FROM `tbl_customer_pod_uploads` WHERE `load_id` = '78' AND `status` = 'Active' GROUP BY `proof_type`
Saya selalu mendapat ralat ini
Ungkapan #1 senarai SELECT tiada dalam klausa GROUP BY dan mengandungi lajur bukan agregat "returntr_prod.tbl_customer_pod_uploads.id", yang tidak bergantung pada lajur dalam klausa GROUP BY ini tidak konsisten dengan sql_mode =hanya_kumpulan_penuh_oleh Serasi
Bolehkah anda beritahu saya penyelesaian terbaik?
Saya perlukan keputusan ini
+----+---------+---------+---------+----------+-----------+------------+---------------+--------------+------------+--------+---------------------+---------------------+ | id | user_id | load_id | bill_id | latitude | langitude | proof_type | document_type | file_name | is_private | status | createdon | updatedon | +----+---------+---------+---------+----------+-----------+------------+---------------+--------------+------------+--------+---------------------+---------------------+ | 1 | 1 | 78 | 1 | 21.1212 | 21.5454 | 1 | 1 | id_Card.docx | 0 | Active | 2017-01-27 11:30:11 | 2017-01-27 11:30:14 | +----+---------+---------+---------+----------+-----------+------------+---------------+--------------+------------+--------+---------------------+---------------------+
Terdapat pembolehubah sistem
ONLY_FULL_GROUP_BY
dalam enjin MySql.Bermula dengan Mysql versi 5.7.5:
ONLY_FULL_GROUP_BY
SQL mod didayakan secara lalaiSebelum versi 5.7.5 : Tidak didayakan secara lalai
ONLY_FULL_GROUP_BY
.Jika
MENYATA syarat, atauONLY_FULL_GROUP_BY
SQL 模式(从版本 5.7.5 开始默认启用),MySQL 将拒绝选择列表、HAVING
条件或ORDER BY
列表指的是非聚合列,这些列既未在GROUP BY
mod SQL didayakan (didayakan secara lalai bermula dengan versi 5.7.5), MySQL akan menolak senarai pilihan,ORDER BY senarai yang merujuk kepada lajur bukan agregat yang tidak Dinamakan dalam klausa
KUMPULAN OLEH dan tidak bergantung padanya secara fungsi.Untuk menyelesaikan masalah, gunakan mana-mana penyelesaian (1 daripada 3 di bawah)
(1) PHPMyAdmin
DilumpuhkanONLY_FULL_GROUP_BY
: Mod
seperti yang ditunjukkan dalam tangkapan skrin di bawah.sql_mode
Jika anda menggunakan phpMyAdmin, tukar tetapansql mode
变量并从值中删除ONLY_FULL_GROUP_BY
Edit mod sql pembolehubah dan alih keluar teks
daripada nilaiatau
(2) SQL/Command Prompt
ONLY_FULL_GROUP_BY
Lumpuhkan : Lumpuhkan mod dengan menjalankan arahan berikut.
atau
SELECT *
(3) Jangan gunakan
ONLY_FULL_GROUP_BY
JANGAN LOKUSKAN
SUMSELECT
查询中使用相关列。相关意味着列,它们要么出现在group by
子句中,要么出现在具有聚合函数的列(MAX
、MIN
MOD, TETAPI 代码> Dalam 代码>,
,
COUNT, dll.)
point(1) OR point(2)
Arahan penting[mysqld]
部分中的/etc/mysql/my.cnf
Perubahan yang dibuat menggunakanOleh itu, anda harus menetapkannya dalam fail konfigurasi (cth. [mysqld] dalam bahagian
/etc/mysql/my.cnf
/etc/mysql/my.cnf) supaya perubahan berterusan merentas MySQL dimulakan semula:Fail konfigurasi:
sql_mode
ORsql-mode
/etc/mysql/my.cnfNama pembolehubah
ORONLY_FULL_GROUP_BY
:sql-mod
🎜🎜 daripada nilai dan simpan fail. 🎜 🎜🎜Nota🎜: Jika anda tidak menemui pembolehubah 🎜 dalam fail konfigurasi, sila masukkan dua baris berikut di penghujung fail 🎜sql_mode
Alih keluar perkataanIni
Ia boleh diselesaikan dengan mudah dengan menukar mod sql dalam MySQL melalui arahan ini,
Ini juga berkesan untuk saya.. Saya menggunakan ini kerana dalam projek saya terdapat banyak pertanyaan seperti ini jadi saya hanya menukar skema sql ini kepada only_full_group_by
Atau hanya masukkan semua lajur dalam klausa GROUP BY yang ditentukan oleh pernyataan SELECT. sql_mode boleh kekal didayakan.
Terima kasih...:-)
Kemas kini: 14 Julai 2023
Menukar skema SQL ialah satu penyelesaian, tetapi amalan terbaik dalam bahasa pertanyaan berstruktur masih mengelak daripada memilih semua (PILIH * ...) lajur dan sebaliknya menggunakan fungsi agregator pada lajur pengumpulan, seperti @Tim Biegeleisen di bawah Disebutkan dalam jawapan kepada https://stackoverflow.com/a/41887524/3602846