MYSQL -- JSON 列に基づいて行を複数の行に分割します。

JSON_TABLE を使用する

たとえば、テーブル内に json フィールド json_field がある場合、
ここに画像の説明を挿入
次のような効果を実現したい場合
ここに画像の説明を挿入
は、 json_table を使用して json フィールドをテーブルに変換して使用できます。

SELECT json_field,j.json_single_value FROM `user`
left join 
json_table(json_field, '$[*]' columns (json_single_value int path '$')) as j on true

クエリ結果は以下のようになります。1行を複数行に分割します。
ここに画像の説明を挿入

JSON_TABLE への引数が正しくありません

場合によっては、次のようにサブクエリを使用します。

SELECT a.json_field,j.json_single_value FROM 
( select * from `user` where 1=1) as a
left join json_table(a.json_field, '$[*]' columns (json_single_value int path '$')) as j on true

メモリを節約してクエリ効率を向上させるために、まずターゲット テーブルをフィルタリングしてから、その json フィールドをテーブルに変換する必要がありますが、
上記の SQL を実行すると、「JSON_TABLE への引数が正しくありません」というエラーがポップアップ表示されます。
その理由は、サブクエリの json_field フィールドの形式に問題があるため、変換を強制する必要があるためです。

SELECT a.json_field,j.json_single_value FROM 
( select * from `user` where 1=1) as a
left join json_table(CAST(a.json_field AS JSON), '$[*]' columns (json_single_value int path '$')) as j on true

おすすめ

転載: blog.csdn.net/qq_40096897/article/details/130288773