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