MySQL 5.6: Alternative zur Funktion ANY_VALUE
Beim Arbeiten mit den MySQL-Versionen 5.7 und 5.6 kann es zu Problemen mit der Funktion ANY_VALUE kommen ist nur in Version 5.7 verfügbar. Dies kann zu Verwirrung und Fehlern bei der Abfrageausführung führen. Es stellt sich die Frage: Wie kann man eine ähnliche Funktionalität in MySQL 5.6 erhalten?
MySQL 5.6 bietet kein direktes Äquivalent zu ANY_VALUE. Es gibt jedoch alternative Ansätze, die das gewünschte Ergebnis erzielen können.
NUR_FULL_GROUP_BY-Modus deaktivieren
Eine Möglichkeit besteht darin, den ONLY_FULL_GROUP_BY-SQL-Modus zu deaktivieren. Dieser Modus erzwingt, dass alle nicht aggregierten Spalten, auf die in einer SELECT-Anweisung verwiesen wird, auch in der GROUP BY-Klausel erscheinen müssen. Durch Deaktivieren dieses Modus ermöglicht MySQL die fehlerfreie Ausführung von Abfragen wie dieser:
SELECT c.id, c.name, ANY_VALUE(i.url) url, ANY_VALUE(i.lat) lat, ANY_VALUE(i.lng) lng FROM countries c, images i WHERE i.country_id = c.id GROUP BY c.id;
Um ONLY_FULL_GROUP_BY zu deaktivieren, verwenden Sie die folgende Syntax:
SET @mode := @@SESSION.sql_mode; SET SESSION sql_mode = ''; /* your query here */ SET SESSION sql_mode = @mode;
Dies ist jedoch wichtig Bitte beachten Sie, dass die Deaktivierung von ONLY_FULL_GROUP_BY in einigen Fällen zu falschen Ergebnissen oder unerwartetem Verhalten führen kann Fälle.
Auswählen des „ersten“ Werts
Ein anderer Ansatz besteht darin, die Abfrage zu ändern, um einen bestimmten Wert aus der Bildertabelle auszuwählen, beispielsweise den ersten. Dies kann mit der Funktion MIN() und Unterabfragen erreicht werden:
SELECT c.id, c.name, i.* FROM countries c LEFT JOIN ( SELECT MIN(id) id, country_id FROM images GROUP BY country_id ) first ON c.id = first.country_id LEFT JOIN images i ON first.id = i.id
Diese Abfrage gibt eine Zeile pro Land zurück, wobei das Bild das erste in der Tabelle ist, sortiert nach seiner ID. Dieser Ansatz liefert ein vorhersehbares und konsistentes Ergebnis.
Das obige ist der detaillierte Inhalt vonWie ahme ich die ANY_VALUE-Funktion von MySQL in Version 5.6 nach?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!