Você está usando indevidamente a notória extensão MySQL não padrão para GROUP POR . O SQL padrão sempre rejeitará sua consulta, porque você está mencionando colunas que não são agregadas e não são mencionadas em
GROUP BY
. Em seu sistema dev, você está tentando contornar isso com ANY_VALUE()
. Na produção, você pode desativar o ONLY_FULL_GROUP_BY modo MySQL . Tente fazer isto :
SET @mode := @@SESSION.sql_mode;
SET SESSION sql_mode = '';
/* your query here */
SET SESSION sql_mode = @mode;
Isso permitirá que o MySQL aceite sua consulta.
Mas veja, sua consulta não está realmente correta. Quando você pode persuadi-lo a ser executado, ele retorna uma linha escolhida aleatoriamente das
images
tabela. Esse tipo de indeterminação geralmente causa confusão para os usuários e sua equipe de suporte técnico. Por que não tornar a consulta melhor, para que ela escolha uma determinada imagem. Se suas
images
tabela tem um autoincremento id
coluna você pode fazer isso para selecionar a "primeira" imagem. 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
Isso retornará uma linha por país com uma imagem previsível mostrada.