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.