相関サブクエリを実装する
外積セットに含める配列項目の数をフィルター処理するサブクエリを作成することにより、JOIN 式をさらに最適化できます。
もう一度、JSON オブジェクトの例を調べてみることにしましょう。
{
"id": "80D3630F-B661-4FD6-A296-CD03BB7A4A0C",
"categoryId": "629A8F3C-CFB0-4347-8DCC-505A4789876B",
"categoryName": "Clothing, Vests",
"sku": "VE-C304-L",
"name": "Classic Vest, L",
"description": "A worn brown classic vest that was a trade-in apparel item",
"price": 32.4,
"tags": [
{
"id": "2CE9DADE-DCAC-436C-9D69-B7C886A01B77",
"name": "apparel",
"class": "group"
},
{
"id": "CA170AAD-A5F6-42FF-B115-146FADD87298",
"name": "worn",
"class": "trade-in"
},
{
"id": "CA170AAD-A5F6-42FF-B115-146FADD87298",
"name": "no-damaged",
"class": "trade-in"
}
]
}
この例では、trade-in と group の両方のクラス内にあるタグが含まれています。 group タグを除外したい場合、どうしたらよいでしょうか?
サブクエリを使用して group タグを除外するサブクエリを記述して JOIN 式を書き直すことができます。
SELECT VALUE t FROM t IN p.tags WHERE t.class = 'trade-in'
このサブクエリをすべてのクエリ全体に追加すると、次のようになります。
SELECT
p.id,
p.name,
t.name AS tag
FROM
products p
JOIN
(SELECT VALUE t FROM t IN p.tags WHERE t.class = 'trade-in') AS t
最終的な JSON 結果配列は次のようになり、セット内の結果は 1 つ少なくなります。
[
{
"id": "80D3630F-B661-4FD6-A296-CD03BB7A4A0C",
"name": "Classic Vest, L",
"tag": "worn"
},
{
"id": "80D3630F-B661-4FD6-A296-CD03BB7A4A0C",
"name": "Classic Vest, L",
"tag": "no-damaged"
}
]