Gibt es ANY_VALUE-Funktionen in MySQL 5.6?
Bei der Arbeit mit MySQL 5.6 in der Produktion und 5.7 in der Entwicklung ist ein Problem aufgetreten. Konkret verwenden Sie die GROUP BY-Klausel, die in 5.6 einen Fehler zurückgibt. In 5.7 lösen Sie das Problem mithilfe der Funktion ANY_VALUE, diese wird jedoch in MySQL 5.6 nicht unterstützt.
Die von Ihnen verwendete Abfrage lautet:
SELECT c.id, c.name, i.* FROM countries c, images i WHERE i.country_id = c.id GROUP BY c.id;
In MySQL 5.6 erhalten Sie eine Fehlermeldung, weil nicht aggregierte Spalten in der GROUP BY-Klausel erwähnt werden. Eine Lösung besteht darin, die Funktion ANY_VALUE zu verwenden, die eine zufällige Zeile aus der Tabelle auswählt.
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;
Die Verwendung von ANY_VALUE ist jedoch nicht ideal, da sie einen zurückgibt willkürlicher Wert. Eine bessere Lösung besteht darin, einen bestimmten Wert abzurufen, beispielsweise den ersten Wert:
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
Dadurch wird das erste Bild für jedes Land anstelle eines zufälligen Bildes zurückgegeben. Alternativ können Sie den Modus ONLY_FULL_GROUP_BY in MySQL 5.6 deaktivieren, um die Ausführung der ursprünglichen Abfrage zu ermöglichen. Dies wird jedoch nicht empfohlen, da dies zu falschen Ergebnissen führen kann.
Das obige ist der detaillierte Inhalt vonBietet MySQL 5.6 ein Äquivalent zur ANY_VALUE-Funktion?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!