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"] |