Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Gibt es eine ANY_VALUE-Funktion für MySQL 5.6?

Sie missbrauchen die notorischen Nicht-Standard-MySQL-Erweiterung für GROUP VON . Standard-SQL wird Ihre Abfrage immer ablehnen, weil Sie Spalten erwähnen, die keine Aggregate sind und nicht in GROUP BY erwähnt werden . In Ihrem Entwicklungssystem versuchen Sie, dies mit ANY_VALUE() zu umgehen .

In der Produktion können Sie den ONLY_FULL_GROUP_BY MySQL-Modus deaktivieren . Versuchen Sie dies :

  SET @mode := @@SESSION.sql_mode;
  SET SESSION sql_mode = '';
  /* your query here */
  SET SESSION sql_mode = @mode;

Dadurch kann MySQL Ihre Abfrage akzeptieren.

Aber sehen Sie, Ihre Frage ist nicht wirklich korrekt. Wenn Sie es zum Ausführen überreden können, gibt es eine zufällig ausgewählte Zeile aus den images zurück Tisch. Diese Art von Unbestimmtheit sorgt oft für Verwirrung bei Benutzern und Ihrem Team des technischen Supports.

Warum nicht die Abfrage verbessern, damit sie ein bestimmtes Bild auswählt? Wenn Ihre images Tabelle hat eine autoincrement id Spalte können Sie dies tun, um das "erste" Bild auszuwählen.

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 eine Zeile pro Land mit einem vorhersagbaren Bild angezeigt.