Ejemplo: combinar tablas en modo SQL
Este ejemplo demuestra cómo combinar datos de dos tablas de base de datos con ayuda de un componente de combinación de MapForce. La operación de combinación se lleva a cabo en modo SQL (véase Combinaciones en modo SQL). Recuerde que también se pueden combinar tres o más tablas de una forma muy parecida (véase Ejemplo: crear un informe CSV a partir de varias tablas).
El ejemplo que aparece a continuación se sirve de la asignación de datos <Documentos>\Altova\MapForce2023\MapForceExamples\Tutorial\JoinDatabaseTables.mfd.
JoinDatabaseTables.mfd
El objetivo de la asignación es combinar datos de dos tablas de base de datos de origen en un solo archivo CSV de destino. Como puede ver en el esquema que aparece a continuación, la primera tabla (users) almacena direcciones de personas y la segunda (addresses) almacena nombres y direcciones de correo de personas. Estas dos tablas están enlazadas por medio de un campo común (el campo id de users corresponde al campo user_id de addresses). En bases de datos este tipo de relación recibe el nombre de relación de clave foránea.
A continuación puede ver los datos que contienen las dos tablas.
Cada registro de usuario de la tabla users puede tener cero o más direcciones en la tabla addresses. Por ejemplo, un usuario puede tener una dirección de tipo "home" o dos direcciones (una de tipo "home" y otra de tipo "work") o no tener dirección alguna.
El objetivo de la asignación es recuperar todos los datos (nombre, apellido, correo electrónico, ciudad, calle y número) de todos los usuarios que tengan como mínimo una dirección en la tabla addrresses. También debería ser posible recuperar solamente cierto tipo de direcciones (p. ej. solo las de tipo "home" o solo las de tipo "work"). El tipo de dirección que se debe recuperar ("home" o "work") debe especificarse como parámetro en la asignación. Los registros recuperados deberán ordenarse alfabéticamente según el apellido de la persona.
Todo esto se conseguirá con ayuda de un componente de combinación.
Nota: | los componentes de combinación no son el único método posible para combinar tablas o vistas de base de datos. También puede realizar combinaciones de datos de base de datos con ayuda de instrucciones SQL SELECT (véase Instrucciones SQL SELECT como tablas virtuales). La principal diferencia entre las instrucciones SQL SELECT y los componentes de combinación es que aquellas se escriben a mano y permiten mayor flexibilidad. Los componentes de combinación son una alternativa sencilla para quienes no dominen SQL. |
Paso nº1: agregar la base de datos de origen
1.En el menú Insertar haga clic en el comando Base de datos (o en el botón Insertar base de datos de la barra de herramientas).
2.Seleccione el tipo de base de datos SQLite y haga clic en Siguiente.
3.Navegue hasta el archivo Nanonull.sqlite de la carpeta <Documentos>\Altova\MapForce2023\MapForceExamples\Tutorial\ y haga clic en Conectarse.
4.Cuando la aplicación lo solicite, seleccione las tablas addresses y users.
Paso nº2: agregar el componente de combinación
1.En el menú Insertar haga clic en Combinación (o en el botón Insertar componente de combinación de la barra de herramientas).
2.Dibuje una conexión entre la tabla users y la primera entrada del componente de combinación.
3.Expanda la tabla users y dibuje una conexión entre la tabla addresses (secundaria de users) y la segunda entrada del componente de combinación. El botón sirve para añadir más tablas si las necesita. No obstante, en este ejemplo solamente combinaremos dos tablas.
Nota: | también se puede agregar la conexión desde la tabla addresses directamente (la que no es tabla secundaria de users). Sin embargo, en el ejemplo que nos ocupa las condiciones de combinación deberían definirse a mano (véase Agregar condiciones de combinación). Para este ejemplo asegúrese de crear las conexiones que aparecen en la imagen anterior. Eso garantizará que la condición de combinación necesaria se crea de forma automática. |
4.Haga clic en el botón Definir condición de combinación del componente de combinación. Observe que la condición de combinación se crea de forma automática (users.id = addresses.user_id).
Paso nº3: agregar el componente CSV de destino
1.En el menú Insertar haga clic en Archivo de texto (o en el botón Insertar archivo de texto de la barra de herramientas).
2.Cuando la aplicación le pida que elija un modo de procesamiento, seleccione la opción Utilizar procesamiento básico... en el cuadro de diálogo.
3.Haga clic en Anexar campo varias veces para crear siete campos CSV. Deje la demás opciones del cuadro de diálogo como están.
4.Ahora haga doble clic en la celda que contiene el título de los campos recién creados y modifique el nombre de las celdas (imagen siguiente).
5.Dibuje las conexiones que pueden verse en la siguiente imagen entre el componente de combinación y el componente CSV. La conexión que une el elemento joined del componente de combinación y el elemento Rows del componente CSV de destino da la orden de crear tantos registros (filas) en el destino como registros existan que cumplan la condición de combinación.
Paso nº4: agregar la condición WHERE/ORDER de SQL y el parámetro de entrada
1.Haga clic con el botón derecho en la conexión que une el elemento joined del componente de combinación y el elemento Rows del componente CSV de destino y después seleccione Insertar WHERE/ORDER de SQL.
2.Introduzca las cláusulas WHERE y ORDER BY que pueden verse en la siguiente imagen.
3.En la asignación añada un componente de entrada (con el comando de menú Insertar | Insertar componente de entrada) y conecte su resultado con el parámetro address_type creado en el paso anterior.
4.Haga doble clic en el componente de entrada y configúrelo como muestra la siguiente imagen. Para poder consultar la vista previa de resultados de la asignación en MapForce es necesario tener un valor en tiempo de diseño (en este caso "home"). Si quiere que la vista previa recupere las direcciones de tipo "work", reemplace este valor con "work".
Funcionamiento de esta asignación de datos
La condición de combinación creada de forma automática en el paso nº2 se asegura de que en el destino solo se copien los registros que cumplan la condición de combinación users.id = addresses.user_id. La condición de combinación se añadió automáticamente porque las dos tablas están unidas por una relación de clave foránea y porque se dibujaron las correspondientes conexiones de asignación de datos (véase Gestionar relaciones de BD). Aunque en nuestro caso concreto no sea relevante, también se pueden definir condiciones de combinación a mano (véase Ejemplo: crear un informe CSV a partir de varias tablas).
Las dos tablas de origen son de la misma base de datos y del mismo componente así que esta combinación puede hacerse en modo SQL . Como el modo SQL está habilitado, la operación de combinación la lleva a cabo la base de datos y no MapForce. En otras palabras, MapForce genera una instrucción de combinación interna INNER JOIN y la envía a la base de datos para que la ejecute.
El componente WHERE/ORDER de SQL que se añadió en el paso nº4 permite filtrar (recuperar las direcciones de tipo "home" o "work") y ordenar el conjunto de registros. Tenga en cuenta que la cláusula WHERE creó un parámetro llamado :address_type de tipo string. Este parámetro permite suministrar el tipo de dirección (home o work) desde la asignación. Para más información consulte Filtrar y ordenar datos de BD (SQL WHERE/ORDER).
Por último, el componente de entrada permite suministrar el valor de parámetro actual cuando se ejecuta la asignación. Recuerde que, cuando la asignación se ejecuta fuera de MapForce (p. ej. cuando se ejecuta con MapForce Server en otro equipo), la entrada debe suministrarse en tiempo de ejecución como parámetro de la línea de comandos, en cuyo caso se omitirá el valor mencionado. Para más información consulte Pasar parámetros a la asignación.