2017-06-29 7 views
-1

ONLY_FULL_GROUP_BY私はMySQLバージョン5.7.18でのUbuntu Serverの16.xx日午前、のMySQL 5.7.18エラー=

私は次のクエリがあります:実行後の

SELECT DISTINCT 
    w.sno, 
    CONCAT(
     CONCAT(
     (SELECT 
      bch_lbl 
     FROM 
      list_benches 
     WHERE sno = w.lb_sno), 
      ' => ', 
      CASE 
      WHEN w.bench_cat_sno = 0 
      THEN 'All Categories' 
      ELSE 
      (SELECT 
       cat_name 
      FROM 
       case_categories 
      WHERE sno = w.bench_cat_sno) 
     END, 
      ' [From ', 
      b.date_from, 
      ' To ', 
      b.date_to, 
      '] ' 
     ), 
    CASE 
     WHEN b.is_active = 1 
    THEN 'Active' 
    ELSE 'Expired' 
    END 
    ) AS benchLbl, 
     w.is_active, 
     b.j_sno 
    FROM 
     working_benches w, 
     bench_judges b 
    WHERE w.sno = b.b_sno 
    GROUP BY w.sno 
    ORDER BY b.is_active DESC ; 

をこのクエリは、次のエラーを返す:

Error Code: 1055 
Expression #2 of SELECT list is not in GROUP BY clause and contains 
nonaggregated column 'phc_caseflow.b.date_from' which is not functionally 
dependent on columns in GROUP BY clause; this is incompatible with 
sql_mode=only_full_group_by 

私は理解している唯一のものはabovの原因となる「sql_modeの= ONLY_FULL_GROUP_BY」でありますeエラー。

誰でもに適合し、問題を解決するには、上記のクエリを変更する方法を私はお勧めできます - だけ私のクエリを編集する必要はありませsql_modeの:右の外に...事前に

おかげ

答えて

0

レビューした後、すべてのログファイルと問題をGoogleが、私はこれはMySQLバージョンマイナーバージョンすなわちV 5.7.18で「BIG」アップデートがあることがわかります。だから、私が見つける次のショートカットを行うにして持っている解決策:

sudo nano /etc/mysql/my.cnf 
Add this to the end of the file 

[mysqld] 
sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" 

そして、私のクエリは、サーバー上の非常に良い実行して、私は私の本番サーバー上の意味...

-1

を私があなたのクエリに表示される問題は、アプリケーションではなくSQL文の中で結果をフォーマットしていることです。

"=>"や "From ["、 "Active"、 "Expired"]のようなものを追加すると、そのことが分かります。このタイプの書式設定は、アプリケーションではなくSQLで行う必要があります。

私の提案は、クエリを再作成し、CONCAT(確かに)とCASE(可能であれば)の使用を削除し、クエリがあなたの後の生データを返すようにすることです。

クエリを実行して生データを戻したら、必要に応じてアプリケーションコードでフォーマットします。これが不可能な場合、私はあなたがこのクエリーでかなり長い間戦うと思われます。

+0

は、私はすでに上で同じクエリを実行しています"sql_mode"が "唯一の完全なグループ"ではない、私の開発マシンです。そのうまく機能しています。さらに、プロシージャに入れて同じ時間...複数の表からドロップダウンリストを取り込む。 –

+0

私はあなたです。それは、「自分のマシンで動作する」という古典的なケースのように見えます。それは本当ですが、それは重要な場所にある生産では機能しません。あなたの選択肢は限られているようです。 – Sage