Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Problema con un Select y Where

Estas en el tema de Problema con un Select y Where en el foro de Bases de Datos General en Foros del Web. Estimados, tengo les consulto lo siguiente: ------------------------------------------------------- Escenario Tabla sta14 (tiene los encabezados de movimientos) Tabla sta20 (tiene los renglones de movimientos) Las dos tablas ...
  #1 (permalink)  
Antiguo 29/09/2011, 09:50
 
Fecha de Ingreso: octubre-2010
Ubicación: Palermo
Mensajes: 55
Antigüedad: 14 años, 1 mes
Puntos: 0
Pregunta Problema con un Select y Where

Estimados, tengo les consulto lo siguiente:
-------------------------------------------------------
Escenario
Tabla sta14 (tiene los encabezados de movimientos)
Tabla sta20 (tiene los renglones de movimientos)
Las dos tablas tienen en comun un campo ncomp_in_s (numero comprobante interno)

Cuando ejecuto la siguiente consulta:

SELECT sta14.id_sta14, sta14.cod_pro_cl, sta14.fecha_mov, sta20.n_rengl_s,
sta14.ncomp_in_s, n_comp,sta14.t_comp, sta14.talonario, sta14.usuario,
sta20.cantidad, sta20.cod_articu, sta20.equivalenc, sta20.tipo_mov, fecha_ingreso, hora_ingreso, usuario_ingreso, terminal_ingreso
FROM sta14 INNER JOIN sta20 ON sta20.ncomp_in_s = sta14.ncomp_in_s
WHERE ((sta14.fecha_mov='2011-09-29') and (sta14.T_COMP='FAC' or sta14.T_COMP='REM') and (sta14.tcomp_in_s='FR' or sta14.tcomp_in_s='RE'))

Esta me tendría que devolver 1 solo registro de un remito que se realizó.
Pero me devuelme 32 filas de otros comprobantes.
Seguramente el problema lo tengo en el where.

Desde ya muchas gracias por la manito que puedan darme.
Saludos
Gustavo
  #2 (permalink)  
Antiguo 29/09/2011, 10:18
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Problema con un Select y Where

Algun ejemplo de tus datos??? porque asi esta dificil saber cual es tu error, puede que el error lo tengas en la fecha......

Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 29/09/2011, 10:30
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Problema con un Select y Where

Bueno, entonces debes revisar lo que realmente estás pidiendo:
Código SQL:
Ver original
  1. (sta14.T_COMP='FAC' OR  sta14.T_COMP='REM')
o sea que sea factura o remito... no sólo remitos.
AL margen de eso, conceptualmente una tabla donde se almacenan facturas no debe almacenar remitos, porque son completamente diferentes. Representan entidades distintas con atributos distintos. Por consecuencia no pueden pertenecer a la misma tabla...
¿Por qué diseñaste eso así?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 29/09/2011, 10:32
 
Fecha de Ingreso: octubre-2010
Ubicación: Palermo
Mensajes: 55
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: Problema con un Select y Where

Hola libras te paso algunos datos
sta14.id_sta14, sta14.cod_pro_cl, sta14.fecha_mov, sta20.n_rengl_s, sta14.ncomp_in_s, n_comp,sta14.t_comp
(registros incorrectos que devuelve)
295755, LP0001,2011-09-29 00:00:00.000,1,00000001,X000500000001,REM
295755, LP0001,2011-09-29 00:00:00.000,2,00000001,X000500000001,REM
295755, LP0001,2011-09-29 00:00:00.000,3,00000001,X000500000001,REM
295755, LP0001,2011-09-29 00:00:00.000,4,00000001,X000500000001,REM

Registro correcto que devuelve.
295755, LP0001,2011-09-29 00:00:00.000,1,00000001,X000500000001,REM

Te sirve esta data?
Gracias
Gustavo
  #5 (permalink)  
Antiguo 29/09/2011, 10:36
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Problema con un Select y Where

Cita:
Iniciado por maloboy_2k Ver Mensaje
Hola libras te paso algunos datos
sta14.id_sta14, sta14.cod_pro_cl, sta14.fecha_mov, sta20.n_rengl_s, sta14.ncomp_in_s, n_comp,sta14.t_comp
(registros incorrectos que devuelve)
295755, LP0001,2011-09-29 00:00:00.000,1,00000001,X000500000001,REM
295755, LP0001,2011-09-29 00:00:00.000,2,00000001,X000500000001,REM
295755, LP0001,2011-09-29 00:00:00.000,3,00000001,X000500000001,REM
295755, LP0001,2011-09-29 00:00:00.000,4,00000001,X000500000001,REM

Registro correcto que devuelve.
295755, LP0001,2011-09-29 00:00:00.000,1,00000001,X000500000001,REM

Te sirve esta data?
Gracias
Gustavo
Según eso, está devolviendo exactamente lo que estás pidiendo. Lo que no estás indicando es que devuelva el primero de los items del conjunto...
El INNER JOIN en este caso devuelve todos y cada uno de los registros coincidentes, que son en realidad todos los items del detalle del remito.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 29/09/2011, 10:49
 
Fecha de Ingreso: octubre-2010
Ubicación: Palermo
Mensajes: 55
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: Problema con un Select y Where

Perdon aclaro esto:
estos registros que devuelve la consulta ->
(registros incorrectos que devuelve)
295755, LP0001,2011-09-29 00:00:00.000,1,00000001,X000500000001,REM
295755, LP0001,2011-09-29 00:00:00.000,2,00000001,X000500000001,REM
295755, LP0001,2011-09-29 00:00:00.000,3,00000001,X000500000001,REM
295755, LP0001,2011-09-29 00:00:00.000,4,00000001,X000500000001,REM

No tienen ese numero interno, ni pertenceen a la fecha de hoy. Por alguna razon me los esta devolviendo. Son de otro tipo de comprobante. Lo único igual que tiene es el interno. que por el where debería descartarlo, ya que la fecha no es de hoy?
-------------------------------------------------------------------------------
Aclaro segundo tema, es un producto "enlatado" y la base no puedo modificarla, ya viene así.

Gracias.
Gustavo
  #7 (permalink)  
Antiguo 29/09/2011, 10:52
 
Fecha de Ingreso: octubre-2010
Ubicación: Palermo
Mensajes: 55
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: Problema con un Select y Where

Otra aclaracion, esos registros que devuelve incorrectos no son ni FR ni RE como lo indica el where

WHERE ((sta14.fecha_mov='2011-09-29') and (sta14.T_COMP='FAC' or sta14.T_COMP='REM') and (sta14.tcomp_in_s='FR' or sta14.tcomp_in_s='RE'))

Gracias Gustavo
  #8 (permalink)  
Antiguo 29/09/2011, 11:15
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Problema con un Select y Where

Pon datos de tus 2 tablas
Tabla sta14 (tiene los encabezados de movimientos)
Tabla sta20 (tiene los renglones de movimientos) para ver como se esta haciendo el join..

Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #9 (permalink)  
Antiguo 29/09/2011, 12:09
 
Fecha de Ingreso: octubre-2010
Ubicación: Palermo
Mensajes: 55
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: Problema con un Select y Where

ok va la data de las 2 tablas.

Sta14
id_sta14, Cod_pro_cl, fecha_mov, n_comp, ncomp_in_s, t_Comp, tcomp_in_s
295755, LP0001, 2011-09-29 00:00:00.000, X000500000001, 00000001, REM, RE
295756, 0, 2011-09-29 00:00:00.000, 000000083214, 00083173, EGR, VS
295780, PL0026, 2011-09-29 00:00:00.000, 999999998115, 00008411, FAC, FR

sta20
id_sta20, cod_articu, cod_deposi, Fecha_mov, n_rengl_s, ncomp_in_s, tcomp_in_s, tipo_mov
2799598, 10050242, 01, 2011-09-29 00:00:00.000, 1, 00000001, RE, S
2799331, 30041537, 01, 2011-09-29 00:00:00.000, 1, 00083173, VS, S
2799847, 10016603, 01, 2011-09-29 00:00:00.000, 1, 00008411, FR, S
2799848, 10016604, 01, 2011-09-29 00:00:00.000, 2, 00008411, FR, S

El primer registro de la sta20 corresponde al remito (ncomp_in_s=00000001)
El segundo regitro de la sta20 corresponde a un egreso (ncomp_in_s=00083173)
Y los ultimos a la factura.

El problema radica que en mi select, me trae el registros de mas. Pero con datos cambiados. Ejemplo:
295755,LP0001,2011-09-29 00:00:00.000,1,00000001,X000500000001,REM,30, SUPERVISOR,4.0000000,13020065,1.0000000,S,2011-09-29 00:00:00.000
295755,LP0001,2011-09-29 00:00:00.000,2,00000001,X000500000001,REM,30,SUPER VISOR,4.0000000,10010336,1.0000000,S,2011-09-29 00:00:00.000

Así trae 6 registros, cuando en realidad devería traer 1 solo.
Gracias y disculpen la molestia.
Gustavo
  #10 (permalink)  
Antiguo 29/09/2011, 12:29
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Problema con un Select y Where

Te regresa varios registros porque nada mas estas filtrando la primer tabla

id_sta14, Cod_pro_cl, fecha_mov, n_comp, ncomp_in_s, t_Comp, tcomp_in_s
295755, LP0001, 2011-09-29 00:00:00.000, X000500000001, 00000001, REM, RE

WHERE ((sta14.fecha_mov='2011-09-29') and (sta14.T_COMP='FAC' or sta14.T_COMP='REM') and (sta14.tcomp_in_s='FR' or sta14.tcomp_in_s='RE'))

si te fijas ese renglon cumple con la condicion que pones tiene una fecha igual a 2011-09-29, la comp es 'Rem o Fac' y la comp_in_s es 'RE' por lo que al unirlo con la otra tabla te traera todos donde el id sea igual al de esta tabla, porque no pones tambien que te traiga de la segunda tabal nada mas los Re o los FR

WHERE ((sta14.fecha_mov='2011-09-29') and (sta14.T_COMP='FAC' or sta14.T_COMP='REM') and (sta14.tcomp_in_s='FR' or sta14.tcomp_in_s='RE'))
and ((sta20.fecha_mov='2011-09-29') and (sta20.T_COMP='FAC' or sta20.T_COMP='REM') and (sta20.tcomp_in_s='FR' or sta20.tcomp_in_s='RE'))


o ponlo todo en tu join FROM sta14 INNER JOIN sta20 ON sta20.ncomp_in_s = sta14.ncomp_in_s and sta20.fecha=sta14.fecha and.......
Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #11 (permalink)  
Antiguo 29/09/2011, 23:07
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Problema con un Select y Where

se soluciono tu problema???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #12 (permalink)  
Antiguo 01/10/2011, 07:59
 
Fecha de Ingreso: octubre-2010
Ubicación: Palermo
Mensajes: 55
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: Problema con un Select y Where

Hola libras, primero gracias por la ayuda, estoy probando hoy sabado. El lunes te posteo los resultados.

Gracias.
  #13 (permalink)  
Antiguo 01/10/2011, 08:15
 
Fecha de Ingreso: octubre-2010
Ubicación: Palermo
Mensajes: 55
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: Problema con un Select y Where

ahahahahahahahaahaha ahora si!!!!!!

funciona!
quedo así, por si alguien le interesa.

SELECT sta14.id_sta14, sta14.cod_pro_cl, sta14.fecha_mov, sta20.n_rengl_s, sta14.ncomp_in_s, n_comp,sta14.t_comp,
sta14.talonario, sta14.usuario, sta20.cantidad, sta20.cod_articu, sta20.equivalenc, sta20.tipo_mov, fecha_ingreso, hora_ingreso, usuario_ingreso, terminal_ingreso
FROM sta14 INNER JOIN sta20 ON sta20.ncomp_in_s = sta14.ncomp_in_s and sta20.fecha_mov = sta14.fecha_mov
WHERE ((sta14.fecha_mov='2011-09-29') and (sta14.t_comp='FAC' or sta14.t_comp='REM') and (sta14.tcomp_in_s='FR' or sta14.tcomp_in_s='RE'))
and ((sta20.fecha_mov='2011-09-29') and (sta20.tcomp_in_s='FR' or sta20.tcomp_in_s='RE'))

Muchas gracias Libras! y demás...
Gustavo

Etiquetas: sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:14.