Вие злоупотребявате с прословутото нестандартно разширение MySQL към GROUP ОТ
. Стандартният SQL винаги ще отхвърли вашата заявка, защото споменавате колони, които не са агрегати и не са споменати в GROUP BY
. Във вашата система за разработчици се опитвате да заобиколите това с ANY_VALUE()
.
В производството можете да изключите ONLY_FULL_GROUP_BY MySQL режим . Опитайте да направите това :
SET @mode := @@SESSION.sql_mode;
SET SESSION sql_mode = '';
/* your query here */
SET SESSION sql_mode = @mode;
Това ще позволи на MySQL да приеме вашата заявка.
Но вижте, вашето запитване всъщност не е правилно. Когато можете да го убедите да стартира, той връща произволно избран ред от images
маса. Този вид неопределеност често причинява объркване за потребителите и вашия екип за техническа поддръжка.
Защо не направите заявката по-добра, така че тя избира конкретно изображение. Ако вашите images
таблицата има автоматично увеличение id
колона можете да направите това, за да изберете "първото" изображение.
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
Това ще върне един ред за държава с показано предсказуемо изображение.