悪名高い非標準のMySQL拡張機能をGROUPに悪用していますBY
。集計ではなく、GROUP BY
で言及されていない列について言及しているため、標準SQLは常にクエリを拒否します。 。開発システムでは、ANY_VALUE()
を使用してこれを回避しようとしています。 。
本番環境では、ONLY_FULL_GROUP_BYMySQLモードをオフにすることができます。 。 これ を実行してみてください :
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
これにより、国ごとに1行が返され、予測可能な画像が表示されます。