La clausola FROM non è limitata ad un elemento. Se vengono specificati più elementi nella clausola FROM, si ottiene l'effetto di unione del prodotto cartesiano, in cui esiste un elemento nel risultato per tutte le combinazioni di elementi nei due elenchi. Questo è lo stesso effetto di unione del linguaggio SQL standard.
Il messaggio Invoice include una serie di dettagli relativi al cliente, al pagamento ed agli acquisti effettuati dal cliente. Se si utilizza il seguente codice ESQL per elaborare il messaggio Invoice di input:
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);
viene generato il seguente messaggio di output:
<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>
Vengono visualizzati tre risultati, che forniscono il numero di descrizioni nel primo elenco (uno) moltiplicate per il numero di prezzi nel secondo (tre). I risultati riportano tutte le combinazioni dei due elenchi. E' possibile verificare ciò visualizzando i campi LastName e UnitPrice selezionati da ciascun risultato:
LastName Smith UnitPrice 27.95 LastName Smith UnitPrice 42.95 LastName Smith UnitPrice 59.99
E' possibile unire dati in un elenco ed in un elemento diverso da un elenco, oppure in due elementi diversi da un elenco e così via. Ad esempio:
OutputRoot.XML.Test.Result1[] = (SELECT ... FROM InputBody.Test.A[], InputBody.Test.b); OutputRoot.XML.Test.Result1 = (SELECT ... FROM InputBody.Test.A, InputBody.Test.b);
Notare la posizione di [] in ciascun caso. Nell'elenco FROM è possibile specificare qualsiasi numero di elementi, non solo uno o due. Se uno degli elementi specifica [] per indicare un elenco di elementi, l'istruzione SELECT genera un elenco di risultati (l'elenco potrebbe contenere un solo elemento ma l'istruzione SELECT potrebbe restituire un elenco di elementi). La destinazione dell'assegnazione deve specificare un elenco, per cui deve terminare con [] oppure è necessario utilizzare la parola chiave THE se la clausola WHERE garantisce la corrispondenza di una sola combinazione.