Ich verwende MySQL 5.7.13 auf meinem Windows-PC mit WAMP Server
Hier ist mein Problem beim Ausführen dieser Abfrage
SELECT *
FROM `tbl_customer_pod_uploads`
WHERE `load_id` = '78' AND
`status` = 'Active'
GROUP BY `proof_type`
Ich bekomme immer Fehler wie diesen
Ausdruck Nr. 1 der SELECT-Liste befindet sich nicht in der GROUP BY-Klausel und enthält die nicht aggregierte Spalte 'returntr_prod.tbl_customer_pod_uploads.id', die funktional nicht von den Spalten in der GROUP BY-Klausel abhängig ist. Dies ist nicht kompatibel mit sql_mode = only_full_group_by
Können Sie mir bitte die beste Lösung nennen ...
Ich brauche Ergebnis wie
+----+---------+---------+---------+----------+-----------+------------+---------------+--------------+------------+--------+---------------------+---------------------+
| 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 |
+----+---------+---------+---------+----------+-----------+------------+---------------+--------------+------------+--------+---------------------+---------------------+
mysql
group-by
mysql-error-1055
Dhanu K.
quelle
quelle
SELECT *
.tbl_customer_pod_uploads
load_id
status
proof_type
only_full_group_by
SQL-Modus deaktivieren.tbl_customer_pod_uploads
WHEREload_id
= '78' ANDstatus
= 'Active' GROUP BYproof_type
Antworten:
Dies
wird einfach gelöst, indem der SQL-Modus in MySQL mit diesem Befehl geändert wird.
Das funktioniert auch für mich. Ich habe dies verwendet, weil es in meinem Projekt viele Abfragen wie diese gibt, also habe ich diesen SQL-Modus einfach in only_full_group_by geändert
Danke... :-)
quelle
Wenn der MySQL-
only_full_group_by
Modus aktiviert ist, gelten bei der Verwendung strenge ANSI-SQL-RegelnGROUP BY
. In Bezug auf Ihre Abfrage bedeutet dies, dass Sie, wenn SieGROUP BY
von derproof_type
Spalte sind, nur zwei Dinge auswählen können:proof_type
Spalte oderMit „Aggregaten“ von anderen Spalten, meine ich mit einer Aggregatfunktion wie
MIN()
,MAX()
oderAVG()
mit einer anderen Spalte. In Ihrem Fall wäre also die folgende Abfrage gültig:Bei der überwiegenden Mehrheit der MySQL-
GROUP BY
Fragen, die ich in SO sehe, ist der strikte Modus deaktiviert, sodass die Abfrage ausgeführt wird, jedoch mit falschen Ergebnissen. In Ihrem Fall wird die Abfrage überhaupt nicht ausgeführt, sodass Sie überlegen müssen, was Sie wirklich tun möchten.Hinweis: Das ANSI-SQL erweitert das, was ausgewählt werden darf, um
GROUP BY
auch Spalten, die funktional von den ausgewählten Spalten abhängen . Ein Beispiel für eine funktionale Abhängigkeit wäre die Gruppierung nach einer Primärschlüsselspalte in einer Tabelle. Da der Primärschlüssel garantiert für jeden Datensatz eindeutig ist, wird auch der Wert einer anderen Spalte bestimmt. MySQL ist eine der Datenbanken, die dies zulässt (SQL Server und Oracle AFAIK nicht).quelle
Verwenden Sie eine beliebige Lösung
(1) PHPMyAdmin
Wenn Sie phpMyAdmin verwenden, ändern Sie die Einstellung " sql_mode " wie im folgenden Screenshot beschrieben.
Bearbeiten Sie die Variable "SQL-Modus" und entfernen Sie den Text "ONLY_FULL_GROUP_BY" aus dem Wert
(2) SQL / Eingabeaufforderung Führen Sie den folgenden Befehl aus.
(3) Verwenden Sie SELECT * nicht
Verwenden Sie die entsprechende Spalte in der SELECT-Abfrage. Relevant bedeutet Spalten, die entweder in der Klausel "Gruppieren nach" oder in der Spalte mit der Aggregatfunktion (MAX, MIN, SUMME, COUNT usw.) enthalten sind.
Wichtige Notiz
Änderungen, die mit Punkt (1) ODER Punkt (2) vorgenommen wurden, setzen ihn nicht DAUERHAFT und werden nach jedem Neustart zurückgesetzt.
Sie sollten dies also in Ihrer Konfigurationsdatei festlegen (z. B. /etc/mysql/my.cnf im Abschnitt [mysqld]), damit die Änderungen nach dem Neustart von MySQL wirksam bleiben:
Config File : /etc/mysql/my.cnf
Variablenname : sql_mode ODER sql-mode
quelle
Sie können sql_mode = only_full_group_by mit einem Befehl deaktivieren. Sie können dies über das Terminal oder die MySql-IDE versuchen
quelle
Die folgende Methode hat mein Problem gelöst:
In Ubuntu
Art:
sudo vi /etc/mysql/my.cnf
Geben Sie A ein, um den Einfügemodus aufzurufen
In der letzten Zeile unter zwei Zeilen Code einfügen:
Geben Sie esc ein, um den Eingabemodus zu verlassen
Geben Sie ein
sudo service mysql restart
, um MySQL neu zu starten.quelle
Sie können es lösen, indem Sie den SQL-Modus mit diesem Befehl ändern:
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
und ... denken Sie daran, die Datenbank wieder zu verbinden !!!
quelle
In Ubuntu
Schritt 1:
Schritt 2: Gehen Sie zur letzten Zeile und fügen Sie Folgendes hinzu
Schritt 3: Speichern
Schritt 4: Starten Sie den MySQL-Server neu.
quelle
Gehen Sie zu phpmyadmin, öffnen Sie die Konsole und führen Sie diese Anforderung aus
quelle
Suchen Sie nach "SQL-Modus", wenn Sie PhpMyAdmin verwenden, und entfernen Sie den Wert :
ONLY_FULL_GROUP_BY
, habe es gerade getan und es ist in Ordnung.quelle
Wie es aussieht, wird die Gruppierung nach mehreren Spalten / Feldern Ihrem Ergebnis nicht schaden. Warum versuchen Sie nicht, der Gruppe Folgendes hinzuzufügen:
Dies wird durch Gruppe
proof_type
zuerst , dannid
. Ich hoffe, dass dies die Ergebnisse nicht verändert. In einigen / den meisten Fällen führt die Gruppierung nach mehreren Spalten zu falschen Ergebnissen.quelle
Geben Sie unten ein
Strg + O => Y = Strg + X.
quelle
Das ist alles.
Ich habe das in meinem Ec2 gemacht und es hat wie ein Zauber funktioniert.
quelle
Hier ist eine sehr schnelle und einfache Möglichkeit, es dauerhaft einzustellen
NB: Die Ausführung
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
ist vorübergehend und beim Neustart des Servers tritt immer noch der Fehler auf. Um dies dauerhaft zu beheben, gehen Sie wie folgt vorwget https://gist.githubusercontent.com/nfourtythree/90fb8ef5eeafdf478f522720314c60bd/raw/disable-strict-mode.sh
chmod +x disable-strict-mode.sh
./disable-strict-mode.sh
Und wenn Sie fertig sind, werden Änderungen an MySQL vorgenommen und es wird neu gestartet
quelle
Hallo, anstatt alle Spalten zu nehmen, nimm einfach das, was du brauchst
ANY_VALUE(column_name)
. Es funktioniert perfekt. Überprüfen Sie einfach.Z.B:
quelle
Update für MySQL 8.0
Ihr
sql-mode
wird nicht haben,NO_AUTO_CREATE_USER
da es wie hier erwähnt entfernt wurde - wie man den SQL-Modus in meinem CNF in MySQL-8 einstelltAuch wenn jemand keine
my.cnf
Datei hat, erstellt er eine neue/etc/my.cnf
und fügt dann die obigen Zeilen hinzu.quelle
Öffnen Sie das WAMP-Panel und öffnen Sie die MySQL-Konfigurationsdatei. Suchen Sie darin nach "sql_mode", wenn Sie es finden, und setzen Sie es auf "". Wenn Sie es nicht finden, fügen Sie der Datei sql_mode = "" hinzu.
Starten Sie den MySQL-Server neu und Sie können loslegen ...
fröhliche Codierung.
quelle
my.ini
Schreiben Sie in Ihre :hängen von Ihrer Version ab. Oder:
oder einfach entfernen:
ONLY_FULL_GROUP_BY
quelle