Finden Sie das Problem Nach dem Upgrade von MySQL auf MySQL 5.7 vor kurzem, bei der Durchführung einiger Group-by-Abfragen, wie der folgenden SELECT *, count(id) als Anzahl FROM `news` GROUP BY `group_id` ORDER BY `inputtime` DESC LIMIT 20 Der folgende Fehler wird gemeldet: Die SELECT-Liste befindet sich nicht in der GROUP BY-Klausel und enthält die nicht aggregierte Spalte „news.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. Ursachenanalyse Der Grund liegt im MySQL 5.7-Modus. ONLY_FULL_GROUP_BY ist standardmäßig aktiviert. ONLY_FULL_GROUP_BY ist ein von MySQL bereitgestellter SQL-Modus, der verwendet wird, um die Gültigkeit der GROUP BY-Klausel der SQL-Anweisung zu überprüfen. http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_only_full_group_by Dies ist nicht kompatibel Später stellte ich fest, dass die Felder der Sortierbedingung „Sortieren nach“ auch in der Gruppe „Gruppieren nach“ enthalten sein müssen und die Sortierfelder auch aus den Gruppierungsfeldern übernommen werden. Wenn Sie es nicht verstehen, können Sie ja mal vorbeikommen und nachschauen. Lösung: 1. Entfernen Sie ONLY_FULL_GROUP_BY, um SQL normal auszuführen. 2. Wenn ONLY_FULL_GROUP_BY nicht ausgewählt ist, müssen alle ausgewählten Felder in den Gruppierungsbedingungen enthalten sein (mit Ausnahme von Feldern, die Funktionen enthalten). (Wenn dieses Problem auch bei „order by“ auftritt, müssen die „order by“-Felder ebenfalls in „group by“ enthalten sein.) 3. Verwenden Sie Diese Funktion ist für GROUP BY-Abfragen nützlich, wenn der SQL-Modus ONLY_FULL_GROUP_BY aktiviert ist, und zwar für Fälle, in denen MySQL eine Abfrage ablehnt, von der Sie wissen, dass sie gültig ist, aus Gründen, die MySQL nicht ermitteln kann. Der Rückgabewert und -typ der Funktion sind dieselben wie der Rückgabewert und -typ ihres Arguments, aber das Funktionsergebnis wird für den SQL-Modus ONLY_FULL_GROUP_BY nicht überprüft. Die obige SQL-Anweisung kann wie folgt geschrieben werden: SELECT ANY_VALUE(id)als ID,ANY_VALUE(uid) als uid ,ANY_VALUE(username) als Benutzername,ANY_VALUE(title) als Titel,ANY_VALUE(author) als Autor,ANY_VALUE(thumb) als Daumen,ANY_VALUE(description) als Beschreibung,ANY_VALUE(content) als Inhalt,ANY_VALUE(linkurl) als linkurl,ANY_VALUE(url) als URL,ANY_VALUE(group_id) als group_id,ANY_VALUE(inputtime) als Eingabezeit, count(id) als Anzahl FROM `news` GROUP BY `group_id` ORDER BY ANY_VALUE(inputtime) DESC LIMIT 20 Ich habe die dritte Methode gewählt. Zusammenfassen Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Wenn Sie Fragen haben, können Sie eine Nachricht hinterlassen. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM. Das könnte Sie auch interessieren:
|
Hintergrund: Als DBA werden die meisten DDL-Änder...
Starten Sie alle gestoppten Docker-Container mit ...
Vorwort Das Dateisystem ist für die Organisation ...
Kurz gesagt, heute sprechen wir über die Verwendu...
Der vollständige Code lautet wie folgt : HTML Quel...
In diesem Artikelbeispiel wird der spezifische Co...
Inhaltsverzeichnis 1. Kommunikationsmethode für V...
Inhaltsverzeichnis Vorwort 1. Was ist ein Abschlu...
Dieser Artikel stellt die von Webdesign-Meistern ...
Inhaltsverzeichnis Vorwort 1. MySQL ermöglicht SS...
Inhaltsverzeichnis abschließend Praxisanalyse Erw...
Problembeschreibung Als ich kürzlich ein Springbo...
Vorwort NFS (Network File System) bedeutet Netzwe...
Ich habe vor Kurzem Docker gelernt und stoße dabe...
Hintergrund Ich möchte die Webpack-Version überpr...