開発メモです。
MariaDBはMySQLと同じく、JSONデータ型をサポートしています。JSONデータが入っているカラムへのWHERE
条件での検索は、MariaDBではJSON_EXTRACT
関数を使用して行います。以下は、JSONデータが格納されているカラムから特定の値を検索するための例です。
例として、your_table
というテーブルがあり、その中にjson_column
というJSONデータ型のカラムがあると仮定します。json_column
に格納されたJSONデータから特定の条件を持つ行を検索するには、次のようにJSON_EXTRACT
関数を使用します。
-- SQL --
SELECT *
FROM your_table
WHERE JSON_EXTRACT(json_column, '$.key') = 'value';
このクエリでは、json_column
から$.key
というJSONパスを使用して、JSONデータ内の特定のキー(”key”)に対応する値が指定した値(”value”)と一致する行を検索します。
JSONデータ内のネストされたキーにアクセスする場合、JSONパスを適切に調整してください。JSONパスはJSONデータのツリー構造をたどるための方法です。
MariaDBでJSON型カラムにWhere検索をかける例
MariaDBのJSONデータ型のカラムで、”id”が1082971を含む行を検索するWHERE
句は次のようにします。
SELECT *
FROM your_table
WHERE JSON_SEARCH(json_column, 'one', '1082971', NULL, '$.id') IS NOT NULL;
このSQLクエリは、JSON_SEARCH
関数を使用して、json_column
内で'1082971'
(探す値)を含むかどうかを検索しています。JSON_SEARCH
関数は、指定したJSONパス内で指定した値を検索し、その値が存在する場合、その値を返します。'one'
は検索モードを指定するために使用され、NULL
はオプションのパラメータです。'$'
はJSONパスのルートを表し、$.id
は”id”キーが存在する場所を指定します。上記のクエリを実行すると、”id”が1082971を含む行が選択されます。