A cláusula FROM de uma função SELECT não é restrita para ter um item. Especificar vários itens na cláusula FROM produz o efeito de junção do produto Cartesiano típico, no qual o resultado inclui um item para todas as combinações de itens nas duas listas.
Utilizar a cláusula FROM desta maneira produz o mesmo efeito de junção do SQL padrão.
A mensagem Invoice inclui um conjunto de detalhes do cliente, detalhes de pagamento e detalhes das compras feitas pelo cliente. Codifique o seguinte ESQL para processar a entrada Mensagem de Exemplo:
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);
A seguinte mensagem de saída é gerada:
<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>
Os resultados são produzidos, fornecendo o número de descrição na primeira linha (um) multiplicada 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 isto consultando os campos LastName e UnitPrice selecionados a partir 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.XMLNS.Test.Result1[] =
(SELECT ... FROM InputBody.Test.A[], InputBody.Test.b);
OutputRoot.XMLNS.Test.Result1 =
(SELECT ... FROM InputBody.Test.A, InputBody.Test.b);
O local de [] em cada caso é significativo. Qualquer número de itens pode ser especificado na cláusula FROM, não apenas um ou dois. Se qualquer um dos itens especificar [] para indicar uma lista de itens, a função SELECT retornará uma lista de resultados (a lista poderá conter apenas um item, mas a função SELECT poderá retornar uma lista de itens).
O destino da designação deve especificar uma lista (portanto, deve finalizar em []) ou você deve utilizar Função THE se souber que a cláusula WHERE garante que apenas uma combinação é correspondida.