rendimiento optimizar mejorar datos consultas all sql sql-server

sql - optimizar - ¿Cuándo es una buena situación usar una unión externa completa?



sql union order by (7)

Es raro, pero tengo algunos casos donde se usa. Por lo general, en los informes de excepciones o ETL u otras situaciones muy peculiares en las que ambas partes tienen datos que intenta combinar. La alternativa es usar un INNER JOIN, un IEFT JOIN (con el lado derecho IS NULL) y un RIGHT JOIN (con el lado izquierdo IS NULL) y hacer una UNION. A veces, este enfoque es mejor porque puede personalizar cada uno de los miembros 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).

Siempre estoy desanimado de usar uno, pero ¿existe alguna circunstancia en la que sea el mejor enfoque?


He utilizado uniones externas completas al intentar encontrar datos huérfanos y no coincidentes, de mis dos tablas y quería todo mi conjunto de resultados, no solo coincidencias.


Hoy mismo tuve que usar Full Outer Join. Es útil en situaciones donde se comparan dos tablas. Por ejemplo, las dos tablas que comparaba eran de sistemas diferentes, así que quería obtener la siguiente información:

  1. La tabla A tiene filas que no están en la tabla B
  2. La tabla B tiene filas que no están en la tabla A
  3. Duplicados en la Tabla A o en la Tabla B
  4. Para filas coincidentes si los valores son diferentes (Ejemplo: la tabla A y la tabla B tienen el número de registro 12345, LoanID abc123, pero la tasa de interés o el monto del préstamo son diferentes

Además, creé un campo adicional en la declaración SELECT que usa una declaración CASE para "comentar" por qué estoy marcando esta fila. Ejemplo: La tasa de interés no coincide / El acuerdo 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 la corrección / entrada de datos, o usarlo para extraer una población específica por el campo de ''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 quieres ver un ejemplo, házmelo saber.


Las raras veces que lo he usado han estado alrededor de las pruebas de NULL en ambos lados de la unión en caso de que creo que faltan datos del INNER JOIN inicial utilizado en el SQL en el que estoy probando.


Noté que la página de wikipedia proporciona un ejemplo .

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

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


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


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