Heim  >  Artikel  >  Datenbank  >  Bietet MySQL 5.6 ein Äquivalent zur ANY_VALUE-Funktion?

Bietet MySQL 5.6 ein Äquivalent zur ANY_VALUE-Funktion?

DDD
DDDOriginal
2024-11-27 04:14:11901Durchsuche

Does MySQL 5.6 Offer an Equivalent to the ANY_VALUE Function?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn