sql >> Base de Datos >  >> RDS >> Sqlserver

Formato de unión SQL:uniones internas anidadas

Para facilitar la lectura, reestructuré la consulta... comenzando con el nivel más alto aparente que es Table1, que luego se vincula a Table3, y luego table3 se vincula a table2. Mucho más fácil de seguir si sigues la cadena de relaciones.

Ahora para responder a tu pregunta. Está obteniendo un conteo grande como resultado de un producto cartesiano. Para cada registro en la Tabla 1 que coincida con la Tabla 3, tendrá X * Y. Luego, para cada coincidencia entre la Tabla 3 y la Tabla 2 tendrá el mismo impacto... Y * Z... Entonces, su resultado para una sola ID posible en la tabla 1 puede tener registros X * Y * Z.

Esto se basa en no saber cómo es la normalización o el contenido de sus tablas... si la clave es una clave PRIMARIA o no...

Ex:
Table 1       
DiffKey    Other Val
1          X
1          Y
1          Z

Table 3
DiffKey   Key    Key2  Tbl3 Other
1         2      6     V
1         2      6     X
1         2      6     Y
1         2      6     Z

Table 2
Key    Key2   Other Val
2      6      a
2      6      b
2      6      c
2      6      d
2      6      e

Entonces, la unión de la Tabla 1 a la Tabla 3 dará como resultado (en este escenario) 12 registros (cada uno en 1 unido a cada uno en 3). Luego, todo eso de nuevo multiplicado por cada registro coincidente en la tabla 2 (5 registros)... se devolvería un total de 60 (3 tbl1 * 4 tbl3 * 5 tbl2).

Entonces, ahora, tome eso y amplíelo en función de sus miles de registros y verá cómo una estructura en mal estado podría asfixiar a una vaca (por así decirlo) y matar el rendimiento.

SELECT
      COUNT(*)
   FROM
      Table1 
         INNER JOIN Table3
            ON Table1.DifferentKey = Table3.DifferentKey
            INNER JOIN Table2
               ON Table3.Key =Table2.Key
               AND Table3.Key2 = Table2.Key2