JSONコレクション表に対するSELECT問合せ
SQL式を使用して、JSONコレクション表のデータを問い合せることができます。SQL問合せは、固定スキーマに基づく表でも同様に機能します。
JSONパス式を指定することで、JSONコレクション表のドキュメント名/値のペアにアクセスできます。ドキュメントの最上位属性には、そのフィールド名をパス式として使用してアクセスでき、ネストされた属性には属性へのパスを使用してアクセスする必要があります。
{"contactPhone":"1517113582","address":{"city":"Houston","number":651,"state":"TX","street":"Tex Ave","zip":95085},"cart":null,"firstName":"Dierdre","lastName":"Amador","orders":[{"EstDelivery":"2023-11-01","item":"handbag","orderID":"201200", "priceperunit":350},{"EstDelivery":"2023-11-01","item":"Lego","orderID":"201201","priceperunit":5500}]}
{"contactPhone":"1917113999","address":{"city":"San Jose","number":501,"state":"San Francisco","street":"Maine","zip":95095},"cart":[{"item":"wallet","priceperunit":950,"quantity":2},{"item":"wall art","priceperunit":9500,"quantity":1}],"firstName":"Sharon","gender":"F","lastName":"Willard","notify":"yes","wishlist":[{"item":"Tshirt","priceperunit":500},{"item":"Jenga","priceperunit":850}]}
例1: ハンドバッグを購入し、規定配送が2023年10月31日より後の買物客から詳細をフェッチします。
SELECT contactPhone, firstName
FROM storeAcct s
WHERE s.orders[].item =any "handbag" AND s.orders[].EstDelivery>=any "2023-10-31"
説明: 10月31日より後に配信される予定のハンドバッグを購入した買物客から詳細をフェッチするには、順序比較演算子any
を使用して、item
およびEstDelivery
フィールドと必要な値を比較します。論理演算子ANDを使用して、両方の条件に一致する行をフェッチします。
ここでは、ISO-8601形式の文字列形式の日付であり、文字列の自然なソート順が適用されるので、タイムスタンプ・データ型にキャストせずにEstDelivery
を比較できます。
{
"contactPhone" : "1517113582",
"firstName" : "Dierdre"
}
例2: カートに財布やハンドバッグの商品を持っているサンノゼからの買物客にプロモーション・メッセージを表示します。
SELECT concat("Hi ",s.firstName) AS Message,
CASE
WHEN s.cart.item =any "wallet"
THEN "The prices on Wallets have dropped"
WHEN s.cart.item =any "handbag"
THEN "The prices on handbags have dropped"
ELSE "Exciting offers on wallets and handbags"
END AS Offer
FROM storeAcct s
WHERE s.address.city =any "San Jose";
説明: CASE文を使用すると、買物客がカートに商品wallet
またはhandbag
を持っている場合に、価格の値下げに関するプロモーション・メッセージを買物客に表示できます。このオファーはSan Jose
からの買物客のみを対象としているため、WHERE句で市区町村を指定します。
{"Message":"Hi Sharon","Offer":"The prices on Wallets have
dropped"}