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

MySQL5.7でJSON配列内の一意の/個別の要素を取得する方法

    MySQLのJSON配列から個別の値を取得する直接的な方法はありません。 1つの方法は、シーケンス/数値ジェネレータテーブルの概念を利用する ことです。 。このシーケンステーブルは、派生テーブル(サブクエリ)として使用することも、データベースに数値を格納する永続的なテーブルを作成することもできます。

    次に、このシーケンステーブルを使用して JSON_EXTRACT() 最初のキー、2番目のキー、3番目のキーなどで配列から値が出力されます。別の行の値を抽出したら、 DISTINCTを使用するだけです。 それらから一意の値を取得します。その後、 JSON_ARRAYAGG() これらの一意の値をJSON配列として再集計する関数。

    スキーマ(MySQL v5.7)

    SET @json = '["a", "b", "b", "a", "c"]';
    

    クエリ

    SELECT Json_arrayagg(dt.val) AS unq_json_array
    FROM   (SELECT DISTINCT Json_extract(@json, Concat('$[', seq.n, ']')) AS val
            FROM   (SELECT 0 AS n UNION ALL SELECT 1 UNION ALL
                    SELECT 2 UNION ALL SELECT 3 UNION ALL 
                    SELECT 4 UNION ALL SELECT 5 UNION ALL
                    SELECT 6 UNION ALL SELECT 7 UNION ALL
                    SELECT 8 UNION ALL SELECT 9) AS seq) AS dt
    WHERE  dt.val IS NOT NULL;
    

    結果

    | unq_json_array  |
    | --------------- |
    | ["a", "b", "c"] |
    

    DBフィドルで表示



    1. customer.pk_name参加transactions.fk_name対customer.pk_id[シリアル]参加transactions.fk_id[整数]

    2. MySQLデータベースからhtmlドロップダウンリストへのデータのフェッチ

    3. 2つの異なるテーブルデータの検索を実装する方法は?

    4. 関係のある単純なMySQL更新ランク