FROM 子句可以有多个项。在 FROM 子句中指定多个项会产生常见的笛卡尔乘积连接结果,在结果中有一个项是两个列表中所有项的组合。这种连接结果与标准 SQL 结果的相同。
发票消息包括一组客户详细信息、支付详细信息以及客户的购买详细信息。 如果编写以下 ESQL 用于处理输入发票消息:
SET OutputRoot.XML.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>
共有三个结果,第三个结果是第一个列表中的描述数(一个)乘以第二个列表中的价格数(三个)得到的结果。这三个结果系统地涵盖了两个列表的所有组合。通过查看从每个结果中选择的 LastName 和 UnitPrice 字段,您可以看出这一点:
LastName Smith UnitPrice 27.95 LastName Smith UnitPrice 42.95 LastName Smith UnitPrice 59.99
您可以将一个列表和一个非列表或者两个非列表中的数据连接在一起。例如:
OutputRoot.XML.Test.Result1[] = (SELECT ... FROM InputBody.Test.A[], InputBody.Test.b); OutputRoot.XML.Test.Result1 = (SELECT ... FROM InputBody.Test.A, InputBody.Test.b);
请注意每种情况下 [] 的位置。您可以在 FROM 列表中指定任意数量的项,而不仅仅是一、两个。如果有任何项使用 [] 表示是一列项,SELECT 将生成结果列表(此列表可能仅包含一项,但 SELECT 可以潜在地返回一列项)。赋值的目标必须指定一个列表(因此必须以 [] 结束,或者如果知道 WHERE 子句保证只匹配一个组合,则必须使用 THE 关键字。)