Tengo una BÚSQUEDA EXTERIOR IZQUIERDA muy básica para devolver todos los resultados de la tabla de la izquierda y alguna información adicional de una tabla mucho más grande. La tabla de la izquierda contiene 4935 registros, pero cuando dejé que me uniera a una tabla adicional, el recuento de registros es significativamente mayor.
Hasta donde sé, es un evangelio absoluto que una IZQUIERDA EXTERIOR IZQUIERDA devolverá todos los registros de la tabla izquierda con registros coincidentes de la tabla derecha y valores nulos para cualquier fila que no pueda coincidir, como tal, entiendo que debería será imposible devolver más filas de las que existen en la tabla de la izquierda, ¡pero está sucediendo de todos modos!
La consulta SQL sigue:
SELECT SUSP.Susp_Visits.SuspReason, SUSP.Susp_Visits.SiteID
FROM SUSP.Susp_Visits LEFT OUTER JOIN
DATA.Dim_Member ON SUSP.Susp_Visits.MemID = DATA.Dim_Member.MembershipNum
Tal vez he cometido un error en la sintaxis o mi comprensión de LEFT OUTER JOIN es incompleta, ¿espero que alguien pueda explicar cómo podría estar ocurriendo esto?
Posdata
Gracias por las excelentes respuestas, mi comprensión de LEFT OUTER JOINS ahora es mucho mejor, ¿podría alguien sugerir una forma de modificar esta consulta para que solo se devuelvan tantos registros como existen en la tabla de la izquierda?
Esta consulta es puramente para generar un informe y las coincidencias duplicadas simplemente confunden las cosas.
/Posdata
fuente
Respuestas:
La IZQUIERDA EXTERIOR IZQUIERDA devolverá todos los registros de la tabla IZQUIERDA unida con la tabla DERECHA siempre que sea posible.
Sin embargo, si hay coincidencias, aún devolverá todas las filas que coinciden, por lo tanto, una fila a la IZQUIERDA que coincida con dos filas en la DERECHA volverá como dos FILAS, al igual que una UNIÓN INTERNA.
EDITAR: en respuesta a su edición, acabo de revisar su consulta y parece que solo está devolviendo datos de la tabla IZQUIERDA. Por lo tanto, si solo desea datos de la tabla IZQUIERDA, y solo desea que se devuelva una fila por cada fila en la tabla IZQUIERDA, entonces no tiene necesidad de realizar una UNIÓN y simplemente puede hacer un SELECCIONAR directamente desde la tabla IZQUIERDA.
fuente
Resultados:
fuente
No es imposible El número de registros en la tabla de la izquierda es el número mínimo de registros que devolverá. Si la tabla derecha tiene dos registros que coinciden con un registro en la tabla izquierda, devolverá dos registros.
fuente
En respuesta a tu postdata, eso depende de lo que quieras.
Está obteniendo (posible) varias filas para cada fila en su tabla izquierda porque hay múltiples coincidencias para la condición de unión. Si desea que sus resultados totales tengan el mismo número de filas que hay en la parte izquierda de la consulta, debe asegurarse de que sus condiciones de unión causen una coincidencia de 1 a 1.
Alternativamente, dependiendo de lo que realmente quiera, puede usar funciones agregadas (si, por ejemplo, solo desea una cadena de la parte derecha, podría generar una columna que sea una cadena delimitada por comas de los resultados del lado derecho para esa fila izquierda.
Si solo está mirando 1 o 2 columnas de la unión externa, puede considerar usar una subconsulta escalar ya que se le garantizará 1 resultado.
fuente
Cada registro de la tabla izquierda se devolverá tantas veces como haya registros coincidentes en la tabla derecha, al menos 1, pero fácilmente podría ser más de 1.
fuente
IZQUIERDA EXTERIOR UNIR al igual que INNER JOIN (unión normal) devolverá tantos resultados para cada fila en la tabla izquierda como tantas coincidencias que encuentre en la tabla derecha. Por lo tanto, puede obtener muchos resultados, hasta N x M, donde N es el número de filas en la tabla izquierda y M es el número de filas en la tabla derecha.
Es el número mínimo de resultados que siempre se garantiza en IZQUIERDA EXTERIOR UNIR para ser al menos N.
fuente
¿Podría ser una relación de uno a muchos entre las tablas izquierda y derecha?
fuente
Preste atención si tiene una cláusula where en la tabla "lado derecho" de una consulta que contiene una unión externa izquierda ... En caso de que no tenga ningún registro en el lado derecho que satisfaga la cláusula where, entonces el registro correspondiente del lado "izquierdo" 'la tabla no aparecerá en el resultado de su consulta ...
fuente
Si necesita una sola fila desde el lado derecho
o solo
fuente
Parece que hay varias filas en la tabla DATA.Dim_Member por fila SUSP.Susp_Visits.
fuente
Si varias (x) filas en Dim_Member están asociadas con una sola fila en Susp_Visits, habrá x filas en el conjunto resultante.
fuente