Tengo problemas con código en VFP y mysql

Hola expertos,
Necesito una ayuda con El código siguiente, ya que me trae los registros repetidos a pesar de colocarle un DISTINC, colocárselo o quitárselo trae lo mismo.
SELECT  personal.id_personal, personal.nombre1,personal.apellido1,  personal.cargo,pers_op.hosp,pers_op.transp,pers_op.comida, pers_op.loc_des,pers_op.loc_alm,pers_op.loc_cen,pers_op.desde,pers_op.hasta
FROM personal,pers_op where (personal.id_personal = pers_op.id_personal) and (SUBSTR(pers_op.id_personal,1,3) = 'ADA') and
(pers_op.desde between ?fdesde and ?fhasta) or
 (pers_op.hasta between ?fdesde and ?fhasta) or
(pers_op.desde <= ?fdesde and pers_op.hasta >= ?fhasta) or
 (pers_op.desde >= ?fdesde and pers_op.desde <= ?fhasta) or
(pers_op.hasta >= ?fdesde and pers_op.hasta <= ?fhasta)
En si el problema es que el usuario introduce un periodo desde - hasta por pantalla y el programa debe mostrar todos aquellos registros que coincidan con esa fecha aunque sea por un día
Ejm: si el periodo es desde 01/02/2010 y hasta 01/05/2010 debe traer todo lo que este entre el periodo, los registros donde desde este dentro del periodo, los que hasta estén dentro del periodo y los que desde es menor que desde pero hasta mayor que hasta es decir periodos mayores aún que el introducido por el usuario.
Saludos y gracias de antemano

1 Respuesta

Respuesta
1
La falla puede estar en los and y los or, a lo mejor en un and restringes los registros, pero en un or los liberas.
Te digo porque a mi me a pasado, hasta que reviso bien el código.
Gracias! En realidad eso suele suceder, pero ya solucioné el problema con un INNER JOIN!
"SELECT personal.id_personal,personal.nombre1,personal.apellido1,personal.cargo,pers_op.hosp,pers_op.transp,pers_op.comida,pers_op.loc_des,pers_op.loc_alm,pers_op.loc_cen,pers_op.desde,pers_op.hasta,pers_op.Dias "+;
"FROM sae.personal INNER JOIN sae.pers_op ON personal.id_personal = pers_op.id_personal and (SUBSTR(pers_op.id_personal,1,3) = 'ADA') "+;
"WHERE (pers_op.desde between ?fdesde and ?fhasta) OR "+;
"(pers_op.hasta between ?fdesde and ?fhasta) or"+;
"(pers_op.desde <= ?fdesde and pers_op.hasta >= ?fhasta)"

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas