A cláusula FROM não está restrita a ter um item. A especificação de vários itens na cláusula FROM produz o efeito de união do produto Cartesiano usual, no qual existe um item no resultado para todas as combinações de itens nas duas listas. Este é o mesmo efeito de união que o SQL padrão.
A mensagem Invoice inclui um conjunto de detalhes do cliente, detalhes de pagamento e detalhes das compras feitas pelo cliente. Se você codificar o seguinte ESQL para processar a mensagem Fatura de entrada:
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);
será gerada a seguinte mensagem de saída:
<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>
Existem três resultados, fornecendo o número de descrições na primeira lista (um) multiplicado pelo número de preços na segunda (três). Os resultados funcionam sistematicamente em todas as combinações das duas listas. Você pode ver isso consultando os campos LastName e UnitPrice, selecionados de cada resultado:
LastName Smith UnitPrice 27.95 LastName Smith UnitPrice 42.95 LastName Smith UnitPrice 59.99
Você pode unir dados que ocorrem em uma lista e não-lista ou em duas não-listas e assim por diante. Por exemplo:
OutputRoot.XML.Test.Result1[] = (SELECT ... FROM InputBody.Test.A[], InputBody.Test.b); OutputRoot.XML.Test.Result1 = (SELECT ... FROM InputBody.Test.A, InputBody.Test.b);
Observe a localização do "[]" em cada caso. Qualquer número de itens pode ser especificado na lista FROM, não apenas um ou dois. Se qualquer um dos itens especificar [] para indicar uma lista de itens, a SELECT gerará uma lista de resultados (a lista pode conter apenas um, mas a SELECT pode retornar potencialmente uma lista de itens). O destino da designação deve especificar uma lista (portanto, deve terminar em [] ou a palavra-chave THE deve ser utilizada, se você souber que a cláusula WHERE garante que apenas uma combinação será correspondida.