質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

0回答

894閲覧

mysqlのJSON_TABLEで深い階層のデータが取得できません

dame-dame

総合スコア78

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

0グッド

0クリップ

投稿2021/12/07 05:13

編集2021/12/07 05:49

API経由でJSONデータを引っ張ってきて、それをmysql で加工しようと
試しています

下記のようにchmour というテーブルのdoc というカラムにJSONテーブルのデータを全部とってきてそこから、必要な情報だけを抜き出すという手法をとっています
イメージ説明

doc 内の、JSONテーブルの形式は下記のとおりです

{ "data": [{ "id": 1, "name": "Bitcoin", "quote": { "USD": { "price": 50745.24480022681, "market_cap": 958753354313.7828, "volume_24h": 37965306392.15267, "last_updated": "2021-12-06T22:59:02.000Z", } }, "symbol": "BTC", "cmc_rank": 1, }, { "id": 1027, "name": "Ethereum", "quote": { "USD": { "price": 4334.1504220897505, "market_cap": 514176609462.0679, "volume_24h": 28112292707.388912, "last_updated": "2021-12-06T22:59:02.000Z", } }, "symbol": "ETH", "cmc_rank": 2, }, { "id": 1839, "name": "Binance Coin", "quote": { "USD": { "price": 590.2309630072833, "market_cap": 98451202214.7604, "volume_24h": 3527768619.2824636, "last_updated": "2021-12-06T22:58:10.000Z", } }, "symbol": "BNB", }, { "id": 825, "name": "Tether", "quote": { "USD": { "price": 1.000946758016139, "market_cap": 75586848900.55356, "volume_24h": 93186929423.50182, "last_updated": "2021-12-06T22:58:09.000Z", } },

、、、でこの中で data >>> quote >>> USD のデータの中から price と last_updated だけを拾いたいのですが
下記のSQLを叩いてみても何も取れない状態です

sql

1select cmhoursum.* 2 from cmhour , JSON_TABLE( 3 `doc`, 4 "$.data.quote.USD[*]" 5 columns ( 6 カラム名 double path '$.price', 7 カラム名2 double path '$.last_updated' 8 ) 9) cmhoursum;

下記のようにカラムに何も表示されません

イメージ説明

doc のカラムにたくさんJSONデータがあるとはいえ、 "$.data.quote.USD[*]" の中から必要なデータは
上記のSQLの式で取得はできないのでしょうか?
もしかしてデータ量が多すぎるとselect文が機能しないとかありますでしょうか
私の理解が間違っていたら教えていただきたいと思います

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2021/12/07 05:15

mysqlのバージョンを記載ください また、データの容量の問題でなさそうならいらないデータはばっさり削除して 提示されたほうがよいでしょう
dame-dame

2021/12/07 05:19

MYSQLのバージョンは  8.0.27 となります。JSONの中身はかなり多いので、すでに不要な部分は削除して提示しています。よろしくお願いいたします
yambejp

2021/12/07 05:40 編集

> すでに不要な部分は削除して提示しています 「data >>> quote >>> USD のデータの中から price と last_updated」なのですから いらないところだらけですよね? このくらいのデータでよいのでは? {"data":[{"id":1,"quote":{"USD":{"price":50745.24480022681,"last_updated":"2021-12-06T22:59:02.000Z","test":123}}},{"id":1027,"quote":{"USD":{"price":4334.1504220897505,"last_updated":"2021-12-06T22:59:02.000Z","test":456}}},{"id":1839,"quote":{"USD":{"price":590.2309630072833,"last_updated":"2021-12-06T22:58:10.000Z","test":789}}},{"id":825,"quote":{"USD":{"price":1.000946758016139,"last_updated":"2021-12-06T22:58:09.000Z","test":999}}}]} その上で、結果として何を得たいのでしょうか?
dame-dame

2021/12/25 06:05

すいません、回答いただいていたのに気づきておりませんでした。 結果として残したいのは doc というカラムの各行にはいっているjson のデータの中から price と last updated をすべて抽出して カラム名を それぞれカラム名、カラム名2 として選択することです。いろいろ試してみましたができませんでした
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問