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

不明なキーを持つJSONをMySQLJSON_TABLEを使用する行に展開します

    ROW_NUMBER()を使用してenumareteを使用できます JSON_KEYS()を使用してキー値を決定する際のウィンドウ関数 、次にJSON_EXTRACT()を使用してそれぞれのキーを抽出します

    などのアレイから取得しました
    WITH k AS
    (
    SELECT *, 
           ROW_NUMBER() OVER(PARTITION BY `jsdata` ORDER BY value DESC) AS rn,
           JSON_KEYS(`jsdata`) AS jk
      FROM `tab` AS t
      JOIN JSON_TABLE(`jsdata`,'$.*' COLUMNS (value INT PATH '$')) j
    )
    SELECT JSON_UNQUOTE(JSON_EXTRACT(jk, CONCAT('$[',rn-1,']'))) AS "key", 
           value
      FROM k
    

    または より簡単なものとして次のクエリを使用してください

    SELECT JSON_UNQUOTE(
           JSON_EXTRACT(JSON_KEYS(`jsdata`), 
                        CONCAT('$[',
                        ROW_NUMBER() OVER(PARTITION BY `jsdata` ORDER BY value DESC)-1,
                        ']'))
                       ) AS "key", value
      FROM `tab` AS t
      JOIN JSON_TABLE(`jsdata`,'$.*' COLUMNS (value INT PATH '$')) j
    

    デモ



    1. Aurora ServerlessMySQL5.6で区切り文字を使用する場合の構文エラー

    2. Oracleの最後の行をテーブルに取得する方法

    3. 複数の列の間にセットのような一意性を適用するにはどうすればよいですか?

    4. MySQLで結果セット全体を連結するにはどうすればよいですか?