only_full_group_by =ein teilt der MySQL-Engine mit:Wende GROUP BY
nicht an wenn Sie Zweifel haben, welche Ergebnisse angezeigt werden sollen, und einen Fehler ausgeben. Nur anwenden, wenn Group By
sagt Ihnen konkret, was zu tun ist. d.h. wenn der Group By
ist voll und perfekt!
only_full_group_by =aus sagt der MySQL-Engine:Wende immer GROUP BY
an und wenn Sie Zweifel haben, welche Ergebnisse Sie auswählen sollen, wählen Sie einfach zufällig eines aus!
Sie müssen es nicht ausschalten, wenn Sie GROUP BY
verwenden richtig!
Beispiel:
Tabelle:Benutzer
id | name
----------------
1 ali
2 john
3 ali
Wenn Sie GROUP BY
verwenden auf name
Spalte:
SELECT * FROM users GROUP BY name;
Es gibt zwei mögliche Ergebnisse:
1 ali
2 john
ODER
2 john
3 ali
MYSQL weiß nicht, welches Ergebnis es wählen soll! Weil es unterschiedliche id
gibt s, aber beide haben name=ali
.
Lösung 1:
nur den name
auswählen Feld:
SELECT name FROM users GROUP BY name;
Ergebnis:
ali
john
Dies ist eine perfekte Lösung. Entfernen von Spalten, die GROUP BY
machen verwirrt. Das bedeutet, dass Sie wissen, was Sie tun. Normalerweise benötigen Sie
diese Spalten nicht, aber wenn Sie sie brauchen, gehen Sie zu Lösung3 !
Lösung 2:
Deaktivieren von only_full_group_by
. MYSQL wählt RANDOMLY eines der beiden möglichen Ergebnisse aus !! (Es ist in Ordnung, wenn es Ihnen egal ist, welche id
es wird wählen, aber denken Sie daran, es einzuschalten unmittelbar nach Ihrer Anfrage, um unerwartetes Verhalten in zukünftigen GroupBys zu verhindern)
Lösung3
Verwenden Sie ein Aggregate
Funktion wie MIN()
, MAX()
um MYSQL bei der Entscheidung zu helfen, was es wählen muss.
Zum Beispiel:
SELECT MAX(id), name FROM users GROUP BY name;
Ergebnis:
2 john
3 ali
Es wird das ali
auswählen Zeile, die die maximale id
hat .