2010-01-19 10 views

Respuesta

19

Es raro, pero tengo algunos casos en que se usa. Típicamente en informes de excepción o ETL u otras situaciones muy peculiares en las que ambas partes tienen datos que intenta combinar. La alternativa es usar INNER JOIN, LEFT JOIN (con el lado derecho IS NULL) y RIGHT JOIN (con el lado izquierdo IS NULL) y hacer UNION - a veces este enfoque es mejor porque se puede personalizar cada unión individual más obviamente (y agregue una columna derivada para indicar qué lado se encuentra o si se encuentra en ambos y cuál va a ganar).

+1

+1 para la opción alternativa :) –

9

Me di cuenta de que la página de la wikipedia provides an example.

Por ejemplo, esto nos permite ver cada empleado que está en un departamento y cada departamento que tiene un empleado , pero también vemos cada empleado que no es parte de un departamento y cada departamento el cual no tiene un empleado .

Tenga en cuenta que no me encontré con la necesidad de una unión externa completa en la práctica ...

8

He usado externa completa se une al intentar encontrar, datos huérfanos que no coinciden, tanto de mis tablas y quería todo mi conjunto de resultados, no solo coincide.

1

Las raras veces que lo he usado ha estado probando NULLs en ambos lados de la unión en caso de que piense que faltan datos en la INNER JOIN inicial utilizada en el SQL que estoy probando.

0

Son útiles para encontrar datos huérfanos pero rara vez uso en el código de producción. Yo no sería "siempre desaconsejado de usar uno" pero creo que en el mundo real son con menor frecuencia la mejor solución en comparación con los internos y outers izquierda/derecha.

0

En las raras ocasiones en que utilicé Full Outer Join fue con fines de análisis de datos, como al comparar dos tablas de clientes de diferentes bases de datos para encontrar duplicados en cada tabla o para comparar las estructuras de dos tablas, o para encontrar valores nulos en una tabla comparada con la otra, o encontrar información faltante en una tabla en comparación con la otra.

0

Justo hoy tuve que usar Full Outer Join. Es útil en situaciones donde comparas dos tablas. Por ejemplo, las dos mesas estaba comparando eran de diferentes sistemas, así que quería obtener información siguiente:

  1. Tabla A tiene ninguna fila que no están en la Tabla B
  2. la Tabla B tiene ninguna fila que no están en tabla A
  3. Duplicados, ya sea en la tabla A o en la tabla B
  4. para la coincidencia de filas si los valores son diferentes (Ejemplo: La tabla A y el cuadro B ambos tienen Cuenta # 12345, LoanID abc123, pero Tasa de interés o la cantidad de préstamo es diferente

Además, creé un campo adicional en la instrucción SELECT que utiliza una instrucción CASE para 'comentar' por qué estoy marcando esta fila. Ejemplo: Tasa de interés no coincide/The Acct no existe en el Sistema A, etc.

Luego lo guardé como una vista. Ahora, puedo usar esta vista para crear un informe y enviarlo a los usuarios para corrección/entrada de datos o usarlo para extraer población específica por el campo 'comentario' que creé usando una declaración CASE (ejemplo: todos los registros con intereses no coincidentes) tasas) en mi procedimiento almacenado y automatizar la corrección, etc.

Si quiere ver un ejemplo, hágamelo saber.

+0

Es por eso que las vistas reutilizables (a diferencia de las que tienen un solo usuario y propósito explícitos) a menudo se desaconsejan. La gente pone cosas como esta en una vista, luego alguien viene y la usa varias veces con varios filtros. Lo siguiente que sabes es que el sistema está vinculado y la gente se pregunta por qué. Cualquier filtrado descarta casi inevitablemente una o más de las 3 partes de dicho conjunto de resultados (interno, izquierdo o derecho). Cuando se usa Completo, el optimizador de consultas no tiene forma de descartar las uniones irrelevantes y, por lo tanto, hace un montón de trabajo adicional solo para descartarlo en un paso de Filtro. – bielawski

Cuestiones relacionadas