あなたJSON_TABLE
は同じために使用することができます
SELECT get_ddi.*
FROM my_table,
JSON_TABLE(my_column, '$[*]' COLUMNS (
my_column VARCHAR(40) PATH '$.ddi')
) get_ddi;
**Schema (MySQL v8.0)**
DROP TABLE IF EXISTS `my_table`;
CREATE TABLE IF NOT EXISTS `my_table` (
`id` SERIAL,
`my_column` JSON
);
INSERT INTO `my_table` (`id`, `my_column`)
VALUES
(1, '[
{
"ddi": "55",
"routing_id": "7",
"price": {
"mt": 0.0285,
"mo": 0.0285
}
},
{
"ddi": "598",
"routing_id": "10",
"price": {
"mt": 0.06,
"mo": 0.06
}
}
]');
**Query #1**
SELECT get_ddi.*
FROM my_table,
JSON_TABLE(my_column, '$[*]' COLUMNS (
my_column VARCHAR(40) PATH '$.ddi')
) get_ddi;
**Output**
| my_column |
| --------- |
| 55 |
| 598 |
以下の@Guilherme Mascarenhasのコメントによると、必要なソリューションはMariaDbでした。バージョン 10.2.31 の時点で、JSON_TABLE
MariaDB の関数は存在しません。ハッキーな解決策は、適切なmariadbシーケンステーブルを使用することです(行数に応じて)。JSON_UNQUOTE は、抽出された値から引用符を削除します。配列からseq
指定された値を取得するためのインデックスとして使用されます。ddi
SELECT
JSON_UNQUOTE(JSON_EXTRACT(t.my_column, CONCAT('$[', seq_0_to_100.seq, '].ddi'))) AS getddi
FROM my_table t
JOIN seq_0_to_100
HAVING getddi IS NOT NULL;
**Output**
| my_column |
| --------- |
| 55 |
| 598 |