2016-04-26 15 views
2

MySQL 5.7では、JSONに関する新機能が浮上しました。これらの機能の中には、データベースに格納されているJSONオブジェクトのフィールドを照会する機能があります。JSONフィールドを使用してMySQLテーブルを照会し、JSON属性にアクセスする

私のオブジェクトは次のようになります。

{ 
"color": [ 
    {"WHITE" :{ "size": [ 
     {"S": [{"Price" : "31"}, 
       {"discountPrice" : "13" }]} 
     ]}}, 
    {"BLACK" :{ "size": [ 
     {"S": "69"}, 
     {"M": "31"}, 
     {"L": "55.666"} 
     ]}} 
]} 

私はこれを通常の表形式のデータであるかのように照会したいと思いますが、この目的のために次のクエリを無駄に試しました。

select json_extract(Sku, '$.color[0]') from CRAWL.DAILYDATA; 

これを従来のRDBMSのような形式にしたいと考えています。

アイデア?

+0

ここには2つの質問があります:「役に立たない」と少しだけ具体的にお答えください。 –

答えて

1

jsonオブジェクトから値としてデータを取得するには、値まですべて取得する必要があります。あなたは、彼らは通常のRDBMSの列にあるようにすべての値を引くしたい場合たとえば、:もちろん

select json_extract(Sku, '$.color[0].WHITE.size[0].S[0].price') as price, 
json_extract(Sku, '$.color[0].WHITE.size[0].S[0].discountPrice') as discountPrice 
from CRAWL.DAILYDATA; 

、あなたがオブジェクトで探している内容を正確に把握する必要があります。これは、jsonのようなスキーマレスオブジェクトを持つことの代償です。原則として、あなたが探しているパスが存在することを確認する

json_contains_path 

json_extract 

の組み合わせを使用するMySQLの機能を定義することができ、そしてそれ以外の場合はnullを返します。個人的には、RDBMSの品質が必要な場合は、値を直接mysqlテーブルに入れることができる形式にしてください。これは、もちろんRDBMSが存在する理由です。あなたがそのようなフォームに入れることができない場合は、上記のようにあなたのjsonを検索することに固執するつもりです。

+0

これは実際に私にこの目的でJSONオブジェクトを使用しないように納得させました。私はRDBMSを使用することについて柵に立っていますが、間に何かをするのがおそらく最悪の選択であることは明らかです。答えに感謝します。 –

+0

純粋でないSQLの答えは、あなたがやっていることをして、より自然にJSONオブジェクトを処理するプログラミング言語を使用することです。たとえば、PHPでjson_decodeを使用して、必要なオブジェクトを取得する単純なクエリを実行します。 MySQLはスキーマレスオブジェクトをきれいに処理するように設定されていません。フィルタリングや並べ替えは依然として課題です。 – juacala

関連する問題