2017-02-03 6 views
0
select users.name,users.user_id,COUNT(subscribers.user_id) 
from users 
LEFT JOIN subscribers 
    ON subscribers.to_id = users.user_id; 

が含まれているそれは私がGROUP BY users.user_id,users.nameその固定ならば、私は2つの解決策は、非集約列に

  1. を持ってエラーにIn aggregated query without GROUP BY, expression #2 of SELECT list contains nonaggregated column users.name; this is incompatible with sql_mode=only_full_group_by

    を与えます。しかし、私は mysqlの私のアプリケーションを書いた< 5.7私は多くの クエリ(その悪夢)を変更する必要があります。

  2. sql_mode=only_full_group_byをオフにできます。

    しかし、それが悪い習慣であるかどうかわかりません。それはonly_full_group_byをオフにすることの賛否両論を持っていますか? ?パフォーマンスが良い方が良いですか?それがより良いアドレスの問題も、それらを解決するだろう私の視点から

+0

MySqlはOracleと同じではありません。タグは削除されました – JohnHC

+0

タフ運が...私は、代替コード1、つまりコードを修正するつもりです。 – jarlh

+0

はどれですか?なぜそれを無効にしないのですか? –

答えて

1

...すなわち不適切なこれらのクエリは、すべての列を提供するために...あなたのアプリケーション内の不適切なクエリの存在を修正するには適切でグループに含まれていません(本質的にランダムな..最初に遭遇する人)..確かにアプリケーションのサイズも重要な役割を持ち、したがって訂正されるべきクエリーの量が...これはタスクの適切なスケジューリングをもたらすかもしれない。 。制御された期間、sql_modeを交換することができます。パフォーマンスに大きな影響を与えなかったことを確認してください。

+0

だから、only_full_group_byのポイントは何ですか?それはどんな方法で助けますか? –

+1

@OSAMABINBUSHこれを読んでください.. https://www.psce.com/blog/2012/05/15/mysql-mistakes-do-you-use-group-by-correctly/... sql_mode = only_full_group_by.ENFORCES使用するGROUP BY正しく... MySQLの多くの人々は非常に非常に非常に間違っているGROUP BYを使用しています.. –