Compartir a través de


Crear autocombinaciones manualmente (Visual Database Tools)

se aplica a:sql Server

Puede combinar una tabla a sí misma incluso si la tabla no tiene una relación reflexiva en la base de datos. Por ejemplo, puede usar una autounión para encontrar pares de autores que viven en la misma ciudad.

Al igual que con cualquier combinación, una autocombinación requiere al menos dos tablas. La diferencia es que, en lugar de agregar una segunda tabla a la consulta, se agrega una segunda instancia de la misma tabla. De este modo, puede comparar una columna en la primera instancia de la tabla con la misma columna de la segunda instancia, lo que le permite comparar los valores de una columna entre sí. Las herramientas del Diseñador de consultas y vistas (Visual Database Tools) asignan un alias a la segunda instancia de la tabla.

Por ejemplo, si va a crear una autounión para buscar todos los pares de autores en Berkeley, compare la columna city en la primera instancia de la tabla con la columna city de la segunda instancia. La consulta resultante podría ser similar a la siguiente:

SELECT authors.au_fname,
       authors.au_lname,
       authors1.au_fname AS Expr2,
       authors1.au_lname AS Expr3
FROM authors
     INNER JOIN authors AS authors1
         ON authors.city = authors1.city
WHERE authors.city = 'Berkeley';

Crear una autocombinación a menudo requiere varias condiciones de combinación. Para comprender por qué, considere el resultado de la consulta anterior:

Cheryl Carson       Cheryl Carson
Abraham Bennet      Abraham Bennet
Cheryl Carson       Abraham Bennet
Abraham Bennet      Cheryl Carson

La primera fila es inútil; indica que Cheryl Carson vive en la misma ciudad que Cheryl Carson. La segunda fila es igualmente inútil. Para eliminar estos datos inútiles, agregue otra condición que conserve solo las filas de resultados en las que los dos nombres de autor describen distintos autores. La consulta resultante podría tener este aspecto:

SELECT authors.au_fname,
       authors.au_lname,
       authors1.au_fname AS Expr2,
       authors1.au_lname AS Expr3
FROM authors
     INNER JOIN authors AS authors1
         ON authors.city = authors1.city
        AND authors.au_id <> authors1.au_id
WHERE authors.city = 'Berkeley';

El conjunto de resultados se ha mejorado:

Cheryl Carson       Abraham Bennet
Abraham Bennet      Cheryl Carson

Pero las dos filas de resultado son redundantes. El primero dice que Carson vive en la misma ciudad que Bennet, y el segundo dice que Bennet vive en la misma ciudad que Carson. Para eliminar esta redundancia, puede modificar la segunda condición de combinación de "no es igual a" a "menor que". La consulta resultante podría tener este aspecto:

SELECT authors.au_fname,
       authors.au_lname,
       authors1.au_fname AS Expr2,
       authors1.au_lname AS Expr3
FROM authors
     INNER JOIN authors AS authors1
         ON authors.city = authors1.city
        AND authors.au_id < authors1.au_id
WHERE authors.city = 'Berkeley';

Y el conjunto de resultados tiene este aspecto:

Cheryl Carson       Abraham Bennet

Crear una autocombinación manualmente

  1. Agregue al panel Diagrama (Visual Database Tools) la tabla o el objeto con valores de tabla con el que desea trabajar.

  2. Vuelva a agregar la misma tabla para que el panel Diagrama muestre la misma tabla o objeto con valores de tabla dos veces en el panel Diagrama.

    El Diseñador de consultas y vistas asigna un alias a la segunda instancia agregando un número secuencial al nombre de la tabla. Además, el Diseñador de consultas y vistas crea una línea de combinación entre las dos apariciones de la tabla o el objeto con valores de tabla dentro del panel Diagrama.

  3. Haga clic con el botón derecho en la línea de combinación y elija Propiedades en el menú contextual.

  4. En la ventana Propiedades, seleccione Condición de unión y tipo y seleccione los puntos suspensivos (...) a la derecha de dicha propiedad.

  5. En el cuadro de diálogo Combinar, cambie el operador de comparación entre las claves principales según sea necesario. Por ejemplo, puedes cambiar el operador a menor que (<).

  6. Cree la condición de combinación adicional (por ejemplo, authors.zip = authors1.zip) arrastrando el nombre de la columna de combinación principal en la primera aparición de la tabla o el objeto con valores de tabla y colocándolo en la columna correspondiente en la segunda aparición.

  7. Especifique otras opciones para la consulta, como columnas de salida, condiciones de búsqueda y criterio de ordenación.