"Lajur tidak teragregat dalam pernyataan SELECT tidak muncul dalam klausa GROUP BY dan tidak serasi dengan sql_mode=only_full_group_by"
P粉034571623
P粉034571623 2023-08-20 13:44:52
0
2
531
<p>Saya menggunakan MySQL 5.7.13 dengan pelayan WAMP pada PC Windows saya</p> <p>Masalah saya ialah apabila melaksanakan pertanyaan ini</p> <pre class="brush:php;toolbar:false;">SELECT * DARIPADA `tbl_customer_pod_uploads` DI MANA `load_id` = '78' DAN `status` = 'Aktif' KUMPULAN MENGIKUT `proof_type`</pre> <p>Saya sentiasa mendapat ralat ini</p> <blockquote> <p>Ungkapan #1 dalam senarai SELECT tiada dalam klausa GROUP BY dan mengandungi lajur bukan agregat 'returntr_prod.tbl_customer_pod_uploads.id', yang tidak mempunyai kebergantungan fungsi pada lajur dalam klausa GROUP BY ini konsisten dengan sql_mode=only_full_group_by tidak serasi</p> </blockquote> <p>Sila beritahu saya penyelesaian terbaik. </p> <p>Hasil yang saya perlukan adalah seperti berikut</p> <pre class="brush:php;toolbar:false;">+----+---------+---------+------- ------------+-----------+----------------+------- ------------+------------+--------+----- -----------------------------+----------------------+ |. id_pengguna |. id_bil | +----+---------+---------+---------+----------+--- -----------------------+----------------+--------------+--------- ------- ----------------------------- -------+--- ------------------+ |. 1 |. 21.1212 | +----+---------+---------+---------+----------+--- -----------------------+----------------+--------------+--------- ------- ------------------------------ --------+--- --------------------+</pra> <p><br /></p>
P粉034571623
P粉034571623

membalas semua(2)
P粉523625080

Terdapat pembolehubah sistem ONLY_FULL_GROUP_BY dalam enjin MySQL.

Bermula dengan MySQL versi 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 BY Mod SQL didayakan (didayakan secara lalai bermula dengan versi 5.7.5), MySQL akan menolak senarai pilihan pertanyaan, syarat MEMILIH atau ORDER BY menyenaraikan yang tidak merujuk -agregat lajur, Lajur ini tidak dinamakan dalam klausa GROUP BY atau berkaitan dengan fungsinya.

Untuk menyelesaikan masalah ini, gunakan salah satu daripada tiga penyelesaian berikut

(1) PHPMyAdmin

Dilumpuhkan: ONLY_FULL_GROUP_BYMod

Jika anda menggunakan phpMyAdmin, tukar tetapan sql_mode seperti pada tangkapan skrin di bawah.

Edit pembolehubah mod sql dan alih keluar sql mode变量并从值中删除ONLY_FULL_GROUP_BYteks

daripada nilai

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子句中出现的列或带有聚合函数(MAXMINSUMCOUNT dll.)


Petua Penting

Perubahan yang dibuat menggunakan 点(1)或点(2) bukan tetapan kekal dan akan dipulihkan selepas setiap but semula.

Oleh itu, anda harus menetapkan ini dalam fail konfigurasi (contohnya, dalam fail [mysqld]部分的/etc/mysql/my.cnf) untuk memastikan perubahan berkuat kuasa merentas permulaan semula MySQL:

Profil: /etc/mysql/my.cnf

Nama pembolehubah: sql_mode sql-mode

atau

mod sql ONLY_FULL_GROUP_BYAlih keluar perkataan

daripada nilai dan simpan fail. sql_modeNota

: Jika 🎜pembolehubah tidak ditemui dalam fail konfigurasi, sila masukkan 2 baris berikut di penghujung fail🎜
[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
P粉121081658

Masalah ini boleh diselesaikan hanya dengan menukar skema sql dalam MySQL, menggunakan arahan berikut:

SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

Berfungsi untuk saya juga...

Saya menggunakan kaedah ini kerana terdapat banyak pertanyaan serupa dalam projek saya, jadi saya hanya menukar mod sql 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 untuk mengelak daripada memilih semua (PILIH *...) lajur dan sebaliknya menggunakan fungsi agregat pada lajur berkumpulan, seperti yang dilakukan @Tim Biegeleisen di bawah Disebutkan dalam jawapan https://stackoverflow.com/a/41887524/3602846

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan