SQL - Relacionar tres tablas

 
Vista:
sin imagen de perfil

Relacionar tres tablas

Publicado por Daniel (1 intervención) el 05/06/2017 13:01:50
Buenas,

a ver si me ayudais con una consulta,

Tengo tres tablas que tienen en común las siguientes columnas:

tablaA [Unidad]
tablaB [Unidad, Id]
tablaC [Unidad, Id]

Y estoy intentando algo como:

SELECT tablaA.*, tablaB.*, tablaC.*
FROM tablaA LEFT JOIN tablaB ON tablaA.Unidad = tablaB.Unidad
INNER JOIN tablaC ON tablaB.Id = tablaC.Id

WHERE tablaB.Unidad = '4CSecu'

mi problema es que en la tablaA hay 15 lineas que tienen como unidad "4CSecu" y por tanto la consulta me devuelve los resultados multiplicados por 15.

He probado ya varias opciones pero estoy saturado y no veo mi error... me ayudais?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve
Val: 135
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Relacionar tres tablas

Publicado por xve (284 intervenciones) el 05/06/2017 16:53:44
Hola Daniel, prueba a poner RIGHT JOIN en vez de LEFT JOIN...

1
FROM tablaA RIGHT JOIN tablaB ON ...

Coméntanos, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Relacionar tres tablas

Publicado por leonardo_josue (1173 intervenciones) el 05/06/2017 21:18:31
Hola Daniel:

1
mi problema es que en la tablaA hay 15 lineas que tienen como unidad "4CSecu" y por tanto la consulta me devuelve los resultados multiplicados por 15.

Si tienes una relación 1 a muchos o muchos a muchos, es normal que te "repita" resultados, ¿qué es exactamente lo que quieres? Puedes comenzar por poner algunos datos de ejemplo y a partir de esos datos dinos qué es lo que quieres mostrar, así te podremos indicar alguna otra alternativa para hacerlo.

Finalmente, si tus tablas B y C se relacionan por dos campos ([Unidad, Id]), entonces debes poner ambos en la cláusula ON:

1
2
3
4
5
6
...
FROM tablaA
LEFT JOIN tablaB ON tablaA.Unidad = tablaB.Unidad
INNER JOIN tablaC ON tablaB.Unidad = tablaC.Unidad
                     and tablaB.Id = tablaC.Id
...

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar