基本的に、選択と投影 を適用することを意味します JSONドキュメントの配列要素とオブジェクトフィールドに。配列内の「行」を選択するには、WHERE句のようなことをしてから、フィールドの1つ(選択基準で使用したものではない)を選択するようなことをする必要があります。
これらはSQLでWHERE句と列のSELECTリストを使用して実行されますが、JSONで同じことを実行することは、JSON_SEARCH()やJSON_CONTAINS()などの関数で簡単に実行できることではありません。
MySQL 8.0が提供するソリューションは、 JSON_TABLE()<です。 / a> 従来の行と列を定義したかのように、JSONドキュメントを仮想派生テーブルに変換する関数。 JSONが説明した形式、オブジェクトの配列である場合に機能します。
これが、サンプルデータをテーブルに挿入して行ったデモです。
create table mytable ( mycol json );
insert into mytable set mycol = '[{"Race": "Orc", "strength": 14}, {"Race": "Knight", "strength": 7}]';
SELECT j.* FROM mytable, JSON_TABLE(mycol,
'$[*]' COLUMNS (
race VARCHAR(10) PATH '$.Race',
strength INT PATH '$.strength'
)
) AS j;
+--------+----------+
| race | strength |
+--------+----------+
| Orc | 14 |
| Knight | 7 |
+--------+----------+
これで、選択や投影など、SELECTクエリで通常行うことができるようになります。
SELECT j.strength FROM mytable, JSON_TABLE(mycol, '$[*]'
COLUMNS (
race VARCHAR(10) PATH '$.Race',
strength INT PATH '$.strength'
)
) AS j
WHERE j.race = 'Orc'
+----------+
| strength |
+----------+
| 14 |
+----------+
これにはいくつかの問題があります:
-
これは毎回行う必要があります JSONデータをクエリするか、それを行うためにVIEWを作成します。
-
属性フィールドがわからないとおっしゃいましたが、JSON_TABLE()クエリを作成するには、クエリで検索および投影する属性を指定する必要があります。完全に未定義のデータにはこれを使用できません。
MySQLでのJSONの使用について、かなりの数の同様の質問に答えました。この種のことを実行したい場合、JSONドキュメントをテーブルのように扱い、WHERE句の条件をJSONデータ内のフィールドに適用できるようにすると、すべてのクエリがはるかに困難になることがわかりました。次に、属性を定義するために数分を費やしたほうがよいと感じ始め、より単純なクエリを記述できるようになります。