SQL - LEFT JOIN Consulta simple con resultado no esperado

 
Vista:

LEFT JOIN Consulta simple con resultado no esperado

Publicado por CF (1 intervención) el 15/04/2018 03:08:18
Gracias por adelantado.

Quisiera preguntar por una consulta simple de Left Join (de tabla A a Tabla B), en donde una vez realizada la consulta, el resultado tiene mas registros que en la Tabla A . A que se debe esto? No debería arrojar máximo la cantidad de registros de la Tabla A.
PD: Recién aprendiendo

Saludos
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
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

LEFT JOIN Consulta simple con resultado no esperado

Publicado por leonardo_josue (1173 intervenciones) el 16/04/2018 15:48:11
Hola CF:

1
2
una vez realizada la consulta, el resultado tiene mas registros que en la Tabla A . A que se debe esto?
No debería arrojar máximo la cantidad de registros de la Tabla A.

Creo que estás un poco confundido CF, el LEFT JOIN te regresará como mínimo TODOS LOS REGISTROS DE LA TABLA A, pero si tienes una relación de 1 a muchos un registro de la tabla A se puede repetir varias veces. Veamos si con un ejemplo queda más claro. Imagina que tenemos estas tablas:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
mysql> SELECT * FROM tabla_a;
+------+-------------+
| id   | descripcion |
+------+-------------+
|    1 | uno         |
|    2 | dos         |
|    3 | tres        |
+------+-------------+
3 rows in set (0.00 sec)
 
mysql> SELECT * FROM tabla_b;
+------+-------------+
| id   | descripcion |
+------+-------------+
|    1 | one         |
|    2 | two         |
|    2 | dois        |
|    2 | deux        |
+------+-------------+
4 rows in set (0.00 sec)

observa que en la tabla_a aparece una vez el id=2, pero en la tabla_b aparece TRES VECES, por lo tanto tienes una relación 1 a muchos, entonces, si hacemos un LEFT JOIN entre la tabla A y la tabla B tenemos lo siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
mysql> SELECT *
    -> FROM tabla_a
    -> LEFT JOIN tabla_b on tabla_a.id = tabla_b.id;
+------+-------------+------+-------------+
| id   | descripcion | id   | descripcion |
+------+-------------+------+-------------+
|    1 | uno         |    1 | one         |
|    2 | dos         |    2 | two         |
|    2 | dos         |    2 | dois        |
|    2 | dos         |    2 | deux        |
|    3 | tres        | NULL | NULL        |
+------+-------------+------+-------------+
5 rows in set (0.06 sec)

Observa que aquí se "repite" el registro de la tabla_2 para cada uno de los registros... El LEFT JOIN te asegura que cada registro de la tabla de la izquierda APAREZCA AL MENOS UNA VEZ, NO IMPORTA SI NO EXISTE EN LA TABLA DE LA DERECHA. En este mismo ejemplo, observa que el ID=3 sólo existe en la tabla de la izquierda, por eso la descripción de la tabla B aparece como NULL.

¿Se entiende?

Haz la prueba y nos comentas,

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

LEFT JOIN Consulta simple con resultado no esperado

Publicado por CF (1 intervención) el 18/04/2018 13:04:54
Muchas gracias. Ahora me queda claro, aunque se supone que la tabla b no debería contener repetidos, voy a revisar.

Por otra parte tengo una pregunta sobre una consulta de stock de materiales:

Tengo una serie de solicitudes sobre diversos materiales, necesito luego de tener el saldo por código de material, poder acceder a cada solicitud individual para realizar un update sobre el registro individual de cada uno de los códigos de los diversos materiales. Podría ayudarme?

Gracias anticipadas
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

LEFT JOIN Consulta simple con resultado no esperado

Publicado por leonardo_josue (1173 intervenciones) el 18/04/2018 15:40:06
hola de nuevo CF:

Esto ya es una pregunta completamente distinta a la original, así que lo correcto es que abras un nuevo post para comenzar con una nueva discusión, de tal manera que la pregunta original de este post quede ya como un tema cerrado.

Te sugiero que en tu nueva pregunta pongas también la estructura de tus tablas y algunos datos de ejemplo y a partir de esos datos nos digas qué es lo que quieres hacer, así será más factible que podamos ayudarte.

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