sql >> データベース >  >> RDS >> Mysql

MySQLは配列のキーでjson値を検索します

    基本的に、選択と投影 を適用することを意味します 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 |
    +----------+
    

    これにはいくつかの問題があります:

    1. これは毎回行う必要があります JSONデータをクエリするか、それを行うためにVIEWを作成します。

    2. 属性フィールドがわからないとおっしゃいましたが、JSON_TABLE()クエリを作成するには、クエリで検索および投影する属性を指定する必要があります。完全に未定義のデータにはこれを使用できません。

    MySQLでのJSONの使用について、かなりの数の同様の質問に答えました。この種のことを実行したい場合、JSONドキュメントをテーブルのように扱い、WHERE句の条件をJSONデータ内のフィールドに適用できるようにすると、すべてのクエリがはるかに困難になることがわかりました。次に、属性を定義するために数分を費やしたほうがよいと感じ始め、より単純なクエリを記述できるようになります。



    1. SQL結合チュートリアル

    2. Oracleストアドプロシージャの例のテーブルタイプ

    3. CSVをMySQLWorkbenchにインポートする方法

    4. greendaoを使用して2つのテーブルから複数の列を選択します