Dalam MySQL, melaksanakan pertanyaan kadangkala boleh mengakibatkan ralat yang berkaitan dengan sql_mode tetapan. Salah satu ralat tersebut ialah:
#1055 - Expression of SELECT list is not in GROUP BY clause and contains nonaggregated column this is incompatible with sql_mode=only_full_group_by
Ralat ini berlaku apabila pertanyaan memasukkan lajur dalam senarai PILIH yang tidak disertakan dalam klausa GROUP BY dan tidak diagregatkan (mis., menggunakan SUM, COUNT, dsb. ). Untuk menyelesaikan isu ini, pertanyaan mesti diubah suai untuk memasukkan lajur tidak teragregat dalam klausa GROUP BY atau untuk mengagregatkannya.
Dalam pertanyaan MySQL yang disediakan:
select libelle, credit_initial, disponible_v, sum(montant) as montant FROM fiche, annee, type where type.id_type=annee.id_type and annee.id_annee=fiche.id_annee and annee = year(current_timestamp) GROUP BY libelle order by libelle asc
Bukan -lajur teragregat adalah boleh guna_v. Untuk menyelesaikan ralat, tambahkannya pada klausa GROUP BY:
... GROUP BY libelle, disponible_v ...
Sebagai alternatif, agregat disponible_v menggunakan fungsi seperti SUM atau AVG:
... GROUP BY libelle HAVING SUM(disponible_v) > 0 ...
Untuk versi MySQL sebelum 8.0 , anda mungkin perlu melaraskan tetapan sql_mode dalam fail konfigurasi MySQL /etc/mysql/conf.d/mysql.cnf dengan menambah baris berikut:
[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
Mulakan semula MySQL selepas membuat perubahan pada fail konfigurasi.
Atas ialah kandungan terperinci Mengapa MySQL Melemparkan Ralat \'Ekspresi Senarai PILIH Bukan dalam GROUP BY Clause\', dan Bagaimana Saya Boleh Membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!