Unión de datos en un mensaje XML

La cláusula FROM no está restringida a tener un solo elemento. Especificar varios elementos en la cláusula FROM causa el habitual efecto cartesiano de unión de productos, en el que hay un elemento en el resultado para todas las combinaciones de elementos de las dos listas. Es el mismo efecto de unión que en SQL estándar.

El mensaje Invoice incluye un conjunto de detalles de clientes, pagos y las compras que el cliente lleva a cabo. Si codifica el siguiente ESQL 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 generará el siguiente mensaje de salida:

<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 dan el número de descripciones de la primera lista (uno) multiplicado por el número de precios de la segunda (tres). El resultado se produce sistemáticamente en todas las combinaciones de ambas listas. Puede verlo si examina 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 unir datos que aparezcan en una lista y una no lista, o en dos no listas, y así sucesivamente. 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 los corchetes [] en cada caso. Se puede especificar cualquier número de elementos en la lista FROM, no sólo uno o dos. Si cualquiera de los elementos especifica [] para indicar una lista de elementos, SELECT generará una lista de resultados (la lista puede contener sólo un elemento, pero SELECT podría devolver una lista de elementos). El destino de la asignación debe especificar una lista (por lo que debe finalizar con []) o se debe utilizar la palabra clave THE si se sabe que la cláusula WHERE garantizará que sólo coincidirá una combinación.

Conceptos relacionados
Flujos de mensajes
ESQL
Diseño de mensajes

Tareas relacionadas
Diseño de un flujo de mensajes
Definición del contenido del flujo de mensajes
Gestión de archivos ESQL

Referencia relacionada
Nodo Compute
Nodo Database
Nodo Filter
ESQL
Función SELECT
Sentencia SET
Mensaje de ejemplo