MySQLでONLY_FULL_GROUP_BYを無効にする方法
MySQLのONLY_FULL_GROUP_BYは、GROUP BY句で指定されていないカラムをSELECT文で参照することを禁止するSQLモードです。このモードを有効にすると、標準SQLに準拠した厳密なグループ化処理が強制されるため、予期しない集計結果を防ぐことができます。
現在のsql_modeを確認する
まず、現在有効なSQLモードを確認してみましょう。
mysql> SELECT @@sql_mode;
ONLY_FULL_GROUP_BYを有効にする方法
以下のクエリを実行すると、ONLY_FULL_GROUP_BYを有効にできます。
mysql> SET sql_mode = 'ONLY_FULL_GROUP_BY'; Query OK, 0 rows affected (0.01 sec)
上記のように、SETコマンドを使用すれば簡単に有効化できます。ただしこの方法は、実行したセッションに対してのみ適用される点に注意してください。
ONLY_FULL_GROUP_BYを無効にする方法
ONLY_FULL_GROUP_BYを無効にするには、次のクエリを実行します。
mysql> SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','')); Query OK, 0 rows affected (0.04 sec)
これで、ONLY_FULL_GROUP_BYの無効化に成功しました。ここではREPLACE()関数を使って、現在のsql_modeから該当モードだけを取り除いているため、他のSQLモードの設定はそのまま維持されます。
無効化時の注意点
GLOBALキーワードを付けた場合、変更は新規に確立される接続から適用され、すでに開かれているセッションには反映されません。また、サーバーを再起動すると設定が元に戻るため、恒久的に変更したい場合は設定ファイル(Linuxならmy.cnf、Windowsならmy.ini)の[mysqld]セクションでsql_modeを定義しておくことをおすすめします。
-
MySQLでサブクエリを正しく括弧で囲む方法
MySQLでは、サブクエリを使用する際に必ず丸括弧( )で囲む必要があります。括弧で囲まれていないサブクエリは構文エラーになるため、注意が必要です。基本構文サブクエリを正しく囲むための基本的な構文は以下の通りです。select if((select count(*) from テーブル名), Yes, No) as 別名;この構文では、IF関数の中にサブクエリを配置しています。サブクエリの結果(レコード数)が0より大きければ「Yes」を、0であれば「No」を返します。動作確認用テーブルの作成実際に動きを理解するために、まずサンプルテーブルを作成しましょう。テーブル作成クエリは以下の通りです。m
-
MySQLのSOUNDEX()関数を使って発音が似た文字列を検索する方法
SOUNDEX()関数とはMySQLのSOUNDEX()関数は、文字列からサウンドex(Soundex)コードと呼ばれる音声表現の文字列を返します。Soundexは、英語の発音の類似性に基づいて文字列をインデックス化するアルゴリズムで、発音がほぼ同じ2つの文字列は、同一のSoundexコードを持つという特徴があります。この特性を活かすことで、スペルは異なるが発音が似ている名前や単語を効率的に検索できます。SOUNDEX()を使用したクエリの基本構文MySQLでSOUNDEX()を使って検索するには、以下のような構文を使用します。SELECT * FROM テーブル名 WHERE SOUNDEX