SELECT 関数の FROM 文節は、1 つ以上の項目を持つことができます。 FROM 文節に複数の項目を指定すると、 通常のデカルト積結合効果を生成します。 これはすなわち、2 つのリスト内の項目のすべての組み合わせについて 1 つの項目が結果に組み込まれます。
FROM 文節をこの方法で使用すると、標準 SQL と同じ結合効果になります。
Invoice メッセージには、顧客、支払い、顧客の購買に関する詳細情報のセットが含まれています。 次の ESQL ステートメントをコード化して入力 サンプル・メッセージを処理します。
SET OutputRoot.XMLNS.Items.Item[] =
(SELECT D.LastName, D.Billing,
P.UnitPrice, P.Quantity
FROM InputBody.Invoice.Customer[] AS D,
InputBody.Invoice.Purchases.Item[] AS P);
次の出力メッセージが生成されます。
<Items>
<Item>
<LastName>Smith</LastName>
<Billing>
<Address>14 High Street</Address>
<Address>Hursley Village</Address>
<Address>Hampshire</Address>
<PostCode>SO213JR</PostCode>
</Billing>
<UnitPrice>27.95</UnitPrice>
<Quantity>2</Quantity>
</Item>
<Item>
<LastName>Smith</LastName>
<Billing>
<Address>14 High Street</Address>
<Address>Hursley Village</Address>
<Address>Hampshire</Address>
<PostCode>SO213JR</PostCode>
</Billing>
<UnitPrice>42.95</UnitPrice>
<Quantity>1</Quantity>
</Item>
<Item>
<LastName>Smith</LastName>
<Billing>
<Address>14 High Street</Address>
<Address>Hursley Village</Address>
<Address>Hampshire</Address>
<PostCode>SO213JR</PostCode>
</Billing>
<UnitPrice>59.99</UnitPrice>
<Quantity>1</Quantity>
</Item>
</Items>
3 つの結果が生成されます。これは、最初のリスト内の説明の数 (1) に 2 番目のリスト内の価格の数 (3) を掛けた数です。 結果は 2 つのリストのすべての組み合わせを、系統的に作業します。 そのことは、それぞれの結果から選択された LastName および UnitPrice フィールドを見れば分かります。
LastName Smith UnitPrice 27.95
LastName Smith UnitPrice 42.95
LastName Smith UnitPrice 59.99
リストと非リスト、また 2 つの非リストなどに出現するデータを結合することができます。 以下に例を示します。
OutputRoot.XMLNS.Test.Result1[] =
(SELECT ... FROM InputBody.Test.A[], InputBody.Test.b);
OutputRoot.XMLNS.Test.Result1 =
(SELECT ... FROM InputBody.Test.A, InputBody.Test.b);
それぞれの [] の位置には意味があります。 FROM 文節には、項目を 1 つか 2 つだけでなく、いくつでも指定できます。 いずれかの項目が項目のリストを示すように [] を指定する場合、SELECT 関数は結果のリストを戻します (リストには 1 つの項目しか含まれていないかもしれませんが、SELECT 関数は項目のリストを戻す可能性があります)。
1 つの組み合わせだけが一致することを WHERE 文節が保証することが知られている場合、代入先もリストを指定するか (同じく [] で終わる)、または THE 関数を使用しなければなりません。