SQL - duplicidad de datos por union de tablas

   
Vista:
Imágen de perfil de GERARDO

duplicidad de datos por union de tablas

Publicado por GERARDO (7 intervenciones) el 01/06/2014 06:08:54
tengo la siguiente sentencia
select t1.wadoco
from tabla1 as t1 inner join tabla2 as t2 on t1.wadoco=t2.pxdoco
groub by t1.wadoco
having (sum(t1.cantidad)<>sum(t2.cantidad))

Si ambas tablas tienen un solo registro de t1.wadoco y t2.pxdoco el query ejecuta bien
pero si tienen mas datos se duplican las cantidades, e intentado hacerlo con subquerys sin exito, me a resultado hacer dos consultas diferentes, exportarlas a excel y asi evitar los duplicados, pero quiero hacerlo todo esto desde un solo query

De antemano gracias por su ayuda
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

duplicidad de datos por union de tablas

Publicado por xve (238 intervenciones) el 01/06/2014 18:12:27
Hola Gerardo, en vez de inner join, utiliza left join...
Lo puedes probar y comentarnos?
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
Imágen de perfil de GERARDO

duplicidad de datos por union de tablas

Publicado por GERARDO (7 intervenciones) el 02/06/2014 13:42:00
Gracias por el interes

No aun duplica datos

D:
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

duplicidad de datos por union de tablas

Publicado por leonardo_josue (880 intervenciones) el 02/06/2014 16:44:33
En primer lugar, me gustaría saber ¿qué es lo que se supone que hace la consulta?

me parece muy extraño que utilices una cláusula HAVING con una condición "<>", no encuentro la lógica de la consulta...

además no me queda claro ¿Qué cantidades son las que duplica?, en tu consulta sólo veo que extraes t1.wadoco, pero no sé si te refieres a este campo.

Puedes probar hacer una consulta simplemente con el JOIN, sin la parte de la agrupación ni el HAVING, para ver si es más claro por qué se están "duplicando" los registros, es decir, has algo como esto:

1
2
3
select *
from tabla1 as t1
inner join tabla2 as t2 on t1.wadoco=t2.pxdoco

Si en realidad tienes una relación uno a uno entre tus tablas T1 y T2, entonces no deberían aparecer "parejas" duplicadas... es posible que te falte alguna condición en el ON.

Sería conveniente que nos dijeras cuál es la estructura de tus tablas y que nos pusieras un ejemplo de los datos... de esta manera sería más fácil entender el problema y poder plantear una situación.

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
Imágen de perfil de GERARDO

duplicidad de datos por union de tablas

Publicado por GERARDO (7 intervenciones) el 02/06/2014 19:19:10
De nuevo , MUCHAS GRACIAS POR SU AYUDA :)

AHORA, TAL CUAL EL QUERY ES ESTE

SELECT T3.WTDOCO, T3.WTOPSQ,SUM(T3.WTSOQS) AS WTSOQS,SUM(T2.PXQTYO) AS PXQTYO FROM PRODDTA/F4801 T1 FULL JOIN PRODDTA/F43092 T2 ON T1.WADOCO=T2.PXDOCO FULL JOIN PRODDTA/F31122 T3 ON T3.WTDOCO=T1.WADOCO AND (T3.WTTYR = '4')
WHERE T1.WADOCO= 378009
GROUP BY T3.WTDOCO, T3.WTOPSQ
HAVING SUM(T3.WTOPSQ)<>SUM(T2.PXQTYO)

LA TABLA PRODDTA/F31122 PUEDE TENER DE 0 HASTA 10 REGISTROS
LA TABLA PRODDTA/F43092 PUEDE TENER DE 0 HASTA 10 REGISTROS
LA TABLA PRODDTA/F4801 SIEMPRE TIENE UN REGISTRO

ESTA CONSULTA DEVUELVE LOS SIGUIENTES DATOS

WTDOCO WTOPSQ WTSOQS PXQTYO
378009 2000 116000 58000
378009 3000 116000 58000
378009 1000 116000 58000

Y SI EJECUTO ESTA SENTENCIA

SELECT WTDOCO,WTOPSQ,SUM(WTSOQS)
FROM PRODDTA/F31122
WHERE WTDOCO = 378009 AND WTTYR = '4'
GROUP BY WTDOCO,WTOPSQ

QUE DEVUELVE LOS SIGUIENTES DATOS

WTDOCO WTOPSQ WTSOQS
378009 1000 29000
378009 2000 29000
378009 3000 29000

SIN EL GRUOP BY LOS DATOS SON ESTOS
WTDOCO WTOPSQ WTSOQS
378009 1000 25200
378009 1000 3800
378009 2000 25200
378009 2000 3800
378009 3000 25200
378009 3000 3800




LAS CUALES SON CORRECTOS

AHORA EL SIGUIENTE QUERY

SELECT PXDOCO,SUM(PXQTYO)
FROM PRODDTA/F43092
WHERE PXDOCO = 378009
GROUP BY PXDOCO

QUE DEVUELVE

PXDOCO PXQTYO
378009 29000

Y SIN GROUP BY LOS DATOS SON ESTOS

PXDOCO PXQTYO
378009 25200
378009 3800

QUE TAMBIEN ES CORRECTO

ASI QUE VEO QUE LOS DATOS SE DUPLICAN POR LA UNION DE TABLAS,

E UNIDO LAS TABLAS MEDIANTE FULL JOIN, FULL OUTER JOIN, INNER JOIN,LEFT JOIN, LEFT OUTER JOIN , PERO E NOTADO QUE TODAS DUPLICAN DATOS, YA QUE HAY "DOCO" QUE NO APARECEN EN PRODDTA/F31122 O PRODDTA/F43902 PERO SIEMPRE LO HACEN EN PRODDTA/F4801, POR ESO USO FULL OUTER JOIN

DENUEVO MUCHISIMAS GRACIAS POR MOLESTARCE EN LEER MIS DUDAS

GRACIAS &#9786;
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