Zneužíváte pro GROUP notoricky známé nestandardní rozšíření MySQL BY
. Standardní SQL váš dotaz vždy odmítne, protože zmiňujete sloupce, které nejsou agregované a nejsou uvedeny v GROUP BY
. Ve vašem dev systému se to snažíte obejít pomocí ANY_VALUE()
.
V produkci můžete vypnout režim MySQL ONLY_FULL_GROUP_BY . Zkuste udělat toto :
SET @mode := @@SESSION.sql_mode;
SET SESSION sql_mode = '';
/* your query here */
SET SESSION sql_mode = @mode;
To umožní MySQL přijmout váš dotaz.
Ale podívej, tvůj dotaz není úplně správný. Když jej můžete přesvědčit, aby se spustil, vrátí náhodně vybraný řádek z images
stůl. Tento druh neurčitosti často způsobuje zmatek pro uživatele a váš tým technické podpory.
Proč nevylepšit dotaz tak, aby vybral konkrétní obrázek. Pokud vaše images
tabulka má automatický přírůstek id
sloupec, můžete tak vybrat "první" obrázek.
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
To vrátí jeden řádek na zemi s předvídatelným zobrazeným obrázkem.