La cláusula FROM no está limitada a un solo elemento. Si especifica varios elementos en la cláusula FROM se genera el efecto de enlace de productos cartesianos habitual, en el que hay un elemento del resultado para todas las combinaciones de elementos de las dos listas. Es el mismo efecto de enlace que el del SQL estándar.
El mensaje Invoice incluye un conjunto de detalles del cliente, detalles de pago y detalles de las compras realizadas por el cliente. Si codifica el ESQL siguiente para procesar el mensaje Invoice 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);
se genera el siguiente mensaje de entrada:
<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>
Hay tres resultados que proporcionan el número de descripciones de la primera lista (uno) multiplicado por el número de precios de la segunda (tres). Los resultados pasan sistemáticamente por todas las combinaciones de las dos listas. Puede verlo si observa los campos LastName y UnitPrice seleccionados de cada resultado:
LastName Smith UnitPrice 27.95 LastName Smith UnitPrice 42.95 LastName Smith UnitPrice 59.99
Puede enlazar los datos generados de una lista y con los que no corresponden a una lista o puede enlazar datos que no correspondan a dos listas. Por ejemplo:
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 la ubicación de [] en cada caso. En la lista FROM se puede especificar cualquier número de elementos, no simplemente uno ni dos. Si cualquiera de los elementos especifica [] para indicar una lista de elementos, la sentencia SELECT genera una lista de resultados (la lista puede contener sólo un elemento pero potencialmente SELECT puede devolver una lista de elementos). El destino de la asignación debe especificar una lista, por lo tanto, debe finalizarla con [] o debe utilizar la palabra clave THE si sabe que la cláusula WHERE garantiza que sólo hay una combinación coincidente.