4

次の内容のテーブルがあるとします。

mysql> select * from test;
+----+------+
| id | val  |
+----+------+
|  1 |    1 |
|  2 |    1 |
|  3 |    1 |
|  4 |    1 |
|  5 |    2 |
|  6 |    2 |
|  7 |    2 |
|  8 |    2 |
+----+------+
8 rows in set (0.00 sec)

mysql> 

ここで、句を使用して列にgroup by集計を行わずに誤った SQL クエリを実行すると、間違った結果が得られます。id

mysql> select id, val from test group by val;
+----+------+
| id | val  |
+----+------+
|  1 |    1 |
|  5 |    2 |
+----+------+
2 rows in set (0.00 sec)

mysql> 

mysql クライアントまたはおそらく他のツールは、このクエリを検証し、group by集計なしで使用するとエラーまたは警告を発行できますか?

4

2 に答える 2

7

はい、これを行うことができます:

MySQL GROUP BY 拡張機能を無効にするには、ONLY_FULL_GROUP_BY SQL モードを有効にします。

mysql> SET sql_mode = 'ONLY_FULL_GROUP_BY';

こちらのドキュメントを参照してください。また、サーバー モジュールに関するこのセクションも役立つ場合があります。

于 2013-03-08T12:02:36.000 に答える
1

デフォルトでは、SQL モードは無効ONLY_FULL_GROUP_BYに設定されています。これが、例外をスローせずにクエリが実行された理由です。その動作を望まない場合は、モードを有効にしてください。ONLY_FULL_GROUP_BY

SQL モードの設定

  • --sql-mode="modes"オプションで開始mysqldするか、(Unix オペレーティング システム) または(Windows)でsql-mode="modes"を使用して、デフォルトの SQL モードを設定できます。モードは、コンマ (",") 文字で区切られたさまざまなモードのリストです。my.cnfmy.ini
  • ステートメントを使用して sql_mode システム値を設定することにより、実行時に SQL モードを変更できます。SET [GLOBAL|SESSION] sql_mode='modes'元:
    SET sql_mode = 'ONLY_FULL_GROUP_BY'
于 2013-03-08T12:03:07.013 に答える