MySQL - problema con inner join

 
Vista:
sin imagen de perfil

problema con inner join

Publicado por Eduardo (5 intervenciones) el 07/09/2021 19:45:25
Saludos colegas,

Tengo la siguiente query:

1
2
3
4
select SUM(vd_unids) as vendidas
from ventas_cab
inner join ventas_det ON vc_id = vd_id
where vd_arti_id = 24

Y el resultado me da;

Vendidas
------------
3

O sea 3 unidades vendidas del producto con codigo 24, ahora, tengo otra tabla en donde están los stocks de los productos, si consulto esa tabla para el codigo 24 me da este resultado:

stock_local_id,stock_articulo_id,stock_unids
2 ,24, ,1
3 ,24 ,6
4 ,24 ,0
5 ,24 ,3
6 ,24 ,4
7 ,24 ,4
8 ,24 ,6
9 ,24 ,3
10 ,24 ,3
11 ,24 ,3
12 ,24 ,5

Si se suma la columna stock_unids da 38. Ahora cuando hago esta query haciendo join de ambas tablas:

1
2
3
4
5
select SUM(vd_unids) as vendidas,SUM(stock_unids) as stock
from ventas_cab
inner join ventas_det ON vc_id = vd_id
left join articulos_stocks ON stock_articulo_id = vd_arti_id
where vd_arti_id = 24

La query me devuelve:

Vendidas Stock
------------ ---------
33 76

¿ De donde salen todas esas unidades ? - La columna stock me devuelve EL DOBLE de lo que realmente hay en registro mientras que la columna vendidas están multiplicadas x 11 (que es la cantidad de registros que hay en la tabla articulos_stock para el codigo 24). El resultado me debería dar:

Vendidas Stock
------------ ---------
3 38


Alguien que me tienda una mano con esto por favor. Saludos y gracias anticipadas.
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 Francisco
Val: 201
Bronce
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

problema con inner join

Publicado por Francisco (73 intervenciones) el 08/09/2021 02:45:32
Hola

Puedes intentar de esta manera

1
2
3
4
5
6
7
8
9
10
11
12
WITH cte_ventas AS(
  SELECT vd_arti_id, SUM(vd_unids) AS vd_unids
  FROM ventas_det
  GROUP BY vd_arti_id
),
cte_stocks AS(
  SELECT stock_articulo_id, SUM(stock_unids) AS stock_unids
  FROM articulos_stocks
  GROUP BY stock_articulo_id
)
SELECT vd_arti_id, vd_unids, stock_unids FROM cte_ventas
INNER JOIN cte_stocks ON cte_stocks.stock_articulo_id = cte_ventas.vd_arti_id

Saludos
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