Rumah > Soal Jawab > teks badan
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 | +----+---------+---------+---------+----------+-----------+------------+---------------+--------------+------------+--------+---------------------+---------------------+
P粉0990000442023-10-11 11:07:33
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 lalai
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,
Untuk menyelesaikan masalah, gunakan mana-mana penyelesaian (1 daripada 3 di bawah)
(1) PHPMyAdmin
ONLY_FULL_GROUP_BY
: Modsql_mode
Jika anda menggunakan phpMyAdmin, tukar tetapan
sql mode
变量并从值中删除ONLY_FULL_GROUP_BY
Edit mod sql pembolehubah dan alih keluar teks
daripada nilaiatau
(2) SQL/Command PromptONLY_FULL_GROUP_BY
Lumpuhkan : Lumpuhkan mod dengan menjalankan arahan berikut.
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
atau SELECT *
(3) Jangan gunakan ONLY_FULL_GROUP_BY
JANGAN LOKUSKAN SELECT
查询中使用相关列。相关意味着列,它们要么出现在 group by
子句中,要么出现在具有聚合函数的列(MAX
、MIN
MOD, TETAPI 代码>
<代码>Dalam 代码>,
point(1) OR point(2)
Arahan penting
[mysqld]
部分中的 /etc/mysql/my.cnf
Perubahan yang dibuat menggunakan
Oleh 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
OR sql-mode
/etc/mysql/my.cnf
Nama pembolehubahONLY_FULL_GROUP_BY
:
sql-mod
sql_mode
Alih keluar perkataan
[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粉9094764572023-10-11 00:45:13
Ini
Ia boleh diselesaikan dengan mudah dengan menukar mod sql dalam MySQL melalui arahan ini,
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
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