Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Czy istnieje możliwość ANY_VALUE dla mysql 5.6?

Niewłaściwie używasz notorycznie niestandardowego rozszerzenia MySQL do GROUP PRZEZ . Standardowy SQL zawsze odrzuci Twoje zapytanie, ponieważ wymieniasz kolumny, które nie są agregacjami i nie są wymienione w GROUP BY . W swoim systemie deweloperskim próbujesz obejść to za pomocą ANY_VALUE() .

W środowisku produkcyjnym można wyłączyć tryb ONLY_FULL_GROUP_BY . Spróbuj zrobić to :

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

Dzięki temu MySQL zaakceptuje Twoje zapytanie.

Ale spójrz, twoje zapytanie nie jest naprawdę poprawne. Kiedy możesz go przekonać do uruchomienia, zwraca losowo wybrany wiersz z images stół. Ten rodzaj nieokreśloności często powoduje zamieszanie dla użytkowników i zespołu pomocy technicznej.

Dlaczego nie ulepszyć zapytania, aby wybrało konkretny obraz. Jeśli Twoje images tabela ma autoinkrementację id możesz to zrobić, aby wybrać „pierwszy” obraz.

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

Spowoduje to zwrócenie jednego wiersza na kraj z przewidywalnym obrazem.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak korzystać z widoków w bazie danych MySQL

  2. Przygotowana instrukcja PDO fetch() zwracająca podwójne wyniki

  3. MySQL COUNT() – Uzyskaj liczbę wierszy do zwrócenia przez zapytanie

  4. MySQL:Jak wielokrotnie dołączać do tego samego stołu?

  5. Znalezienie następnego dostępnego identyfikatora w MySQL