SQL_MODE=only_full_group_by: Senarai SELECT tiada dalam klausa GROUP BY dan mengandungi lajur bukan agregat....Tidak serasi
P粉850680329
P粉850680329 2023-10-10 13:41:44
0
2
646

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粉850680329
P粉850680329

membalas semua(2)
P粉099000044

Terdapat pembolehubah sistem ONLY_FULL_GROUP_BY dalam enjin MySql.

Bermula dengan Mysql versi 5.7.5: ONLY_FULL_GROUP_BYSQL 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,

MENYATA syarat, atau

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 ONLY_FULL_GROUP_BY

Dilumpuhkan

: Modsql_mode Jika anda menggunakan phpMyAdmin, tukar tetapan

seperti yang ditunjukkan dalam tangkapan skrin di bawah.

sql mode变量并从值中删除ONLY_FULL_GROUP_BY

Edit mod sql pembolehubah dan alih keluar teks

daripada nilai

atau

(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 子句中,要么出现在具有聚合函数的列(MAXMIN MOD, TETAPI 代码> Dalam 代码>,

SUM
,

COUNT, dll.)

point(1) OR point(2)Arahan penting

[mysqld] 部分中的 /etc/mysql/my.cnfPerubahan yang dibuat menggunakan

titik(1) ATAU titik(2) jangan tetapkannya secara kekal dan akan dipulihkan selepas setiap but semula.

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:

OR

sql-mod sql_modeAlih keluar perkataan

🎜🎜 daripada nilai dan simpan fail. 🎜 🎜🎜Nota🎜: Jika anda tidak menemui pembolehubah 🎜 dalam fail konfigurasi, sila masukkan dua 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粉909476457

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

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