2010-08-18 21 views
10

Tengo una consulta como la siguiente que devuelve el número correcto de filas que esperaría. (Se tiene que coincidir con una consulta similar que devuelve los mismos conjuntos de datos pero con diferente información asociada de otras tablas relacionadas.Agregar un INNER JOIN a una consulta no debería aumentar el número de filas devuelto ¿no?

SELECT * 
FROM LK 
INNER JOIN STC ON LK.V = STC.VI 
LEFT OUTER JOIN BC ON LK.BC = BC.ID 
LEFT OUTER JOIN K AS LT ON ISNULL(BC.ZA, LK.VH) = LT.KNN 
WHERE 
    LT.KI IS NOT NULL AND LT.KS = 0 
    OR 
    LT.KI IS NULL 
ORDER BY 
    LK.Z 

Pero tan pronto como añado otra combinaciones internas en realidad me da más filas de atrás. Yo pensaba que una combinación interna sólo se devuelve filas cuando la información se encuentra en ambos lados de la combinación, así que espera a obtener ya sea el mismo o menos filas de atrás pero me da alrededor de dos veces más

Por ejemplo:..

SELECT * 
FROM LK 
INNER JOIN STC ON LK.V = STC.VI 

INNER JOIN VK ON LK.V = VK.ID 
INNER JOIN K AS A ON VK.AIN = A.KNN 

LEFT OUTER JOIN BC ON LK.BC = BC.ID 
LEFT OUTER JOIN K AS LT ON ISNULL(BC.ZA, LK.VH) = LT.KNN 
WHERE 
    LT.KI IS NOT NULL AND LT.KS = 0 
    OR 
    LT.KI IS NULL 
ORDER BY 
    LK.Z 

¿Tiene sentido esto? ¿Cómo se pueden agregar dos combinaciones internas más r Esult en más filas que se devuelven?

Y más al punto de mi problema real, ¿cómo puedo ajustar la segunda consulta para que devuelva las mismas filas que la primera consulta pero con las columnas adicionales de las tablas unidas?

Respuesta

15

si hay más de un VK por LK, aumentará el número de filas. Aunque no entiendo tu esquema lo suficiente como para solucionarlo.

+0

+1. Un poco corto quizás pero exacto. –

+0

Por supuesto ... Eso tiene sentido ... Supongo que fue uno de esos bosques y cosas de árboles. – Kurt

+1

¿Qué significa VK y LK, por favor? Solo sé la clave externa y la clave principal. – systemovich

Cuestiones relacionadas