Lajur dalam pernyataan SELECT tiada dalam klausa GROUP BY dan mengandungi lajur bukan agregat....Tidak serasi dengan sql_mode=only_full_group_by
2 jawapan
Terdapat pembolehubah sistem ONLY_FULL_GROUP_BY dalam enjin MySql.
Bermula dengan versi Mysql 5.7.5 : Mod SQL didayakan secara lalai ONLY_FULL_GROUP_BY.
Sebelum versi 5.7.5 : Tidak didayakan secara lalai ONLY_FULL_GROUP_BY.
Jika ONLY_FULL_GROUP_BY SQL模式(从版本5.7.5开始默认启用),MySQL将拒绝查询选择列表、HAVING条件或ORDER BY列表引用非聚合列,这些列既不在GROUP BYSQL mod didayakan (didayakan secara lalai bermula dengan versi 5.7.5), MySQL akan menolak senarai pilihan pertanyaan, syarat ORDER BY yang tidak merujuk -agregat lajur, Lajur ini tidak dinamakan dalam klausa GROUP BY dan tidak bergantung padanya.
Untuk menyelesaikan isu ini, gunakan salah satu daripada tiga penyelesaian berikut
(1) PHPMyAdmin
Dilumpuhkan: ONLY_FULL_GROUP_BYMod
Jika anda menggunakan phpMyAdmin, sila tukar tetapan sql_mode seperti pada tangkapan skrin di bawah.
Edit pembolehubah sql mode变量并从值中删除ONLY_FULL_GROUP_BYteks
atau
(2) SQL/Command Prompt
Lumpuhkan dengan menjalankan arahan berikut: ONLY_FULL_GROUP_BYmod.
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
atau
(3) Jangan gunakan SELECT *
Jangan lumpuhkan mod ONLY_FULL_GROUP_BY, sebaliknya
dalam ruangan SELECT查询中使用相关列。相关列指的是在group by子句中出现的列或带有聚合函数(MAX、MIN、SUM、COUNT dll.)
Arahan penting
Perubahan yang dibuat menggunakan point(1)或point(2) tidak ditetapkan secara kekal dan akan dipulihkan selepas setiap but semula.
Oleh itu, anda harus menetapkan ini dalam fail konfigurasi (cth. dalam [mysqld]部分的/etc/mysql/my.cnf) supaya perubahan berterusan selepas MySQL dimulakan semula:
Profil: /etc/mysql/my.cnf
Nama pembolehubah: sql_mode 或者 sql-mode
ONLY_FULL_GROUP_BYAlih keluar perkataan daripada nilai
dan simpan fail.
sql_modeNota
[mysqld] sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Ini
Masalah ini akan diselesaikan hanya dengan menukar mod SQL dalam MySQL, menggunakan arahan berikut:
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
Berfungsi untuk saya juga... Saya menggunakan ini kerana dalam projek saya, saya mempunyai banyak pertanyaan serupa jadi saya hanya menukar corak SQL ini kepada only_full_group_by
Atau hanya masukkan semua lajur yang ditentukan oleh pernyataan SELECT dalam klausa GROUP BY. sql_mode boleh kekal didayakan.
Terima kasih... :-)
Tarikh kemas kini: 14 Julai 2023
Menukar skema SQL adalah satu penyelesaian, tetapi amalan terbaik untuk bahasa pertanyaan berstruktur adalah mengelak daripada memilih semua (PILIH *...) lajur dan sebaliknya menggunakan fungsi agregat pada lajur pengelompokan, seperti yang dilakukan @Tim Biegeleisen di bawah Disebutkan dalam jawapan kepada https://stackoverflow.com/a/41887524/3602846
Alat panas Tag
Hot Questions
Hot Tools
vc9-vc14 (32+64 bit) koleksi perpustakaan masa jalan (pautan di bawah)
Muat turun koleksi perpustakaan runtime yang diperlukan untuk pemasangan phpStudy
VC9 32-bit
VC9 32-bit phpstudy pustaka masa jalan persekitaran pemasangan bersepadu
Kotak alat pengaturcara PHP versi penuh
Programmer Toolbox v1.0 PHP Persekitaran Bersepadu
VC11 32-bit
VC11 32-bit phpstudy pustaka masa jalan persekitaran pemasangan bersepadu
SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan
Topik panas





