FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Problemas con Operador Or
Hola a todos:
Tengo la siguiente consulta SQL:
pero siempre me toma los valores del OR Si a la primera instrucción le paso un valor inexistente solo en ese momento debería saltar al operador OR. Espero que se entienda, Mil Gracias
__________________
No todo es como parece ser... Última edición por lucasarts_18 fecha: 20-07-2006 a las 23:21:01. |
#2
|
||||
|
||||
Cita:
Cita:
__________________
Van Troi De León (Not) Guía, Code vB:=Delphi-SQL, ¿Cómo? Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto! |
#3
|
||||
|
||||
Amigo VtDeleon, tengo entendido que el operador OR se evalua de todas maneras si la primera expresión es verdadera.
Lo que yo necesito es algo así. 1 = Documento Ingresado 2 = Docuemnto Enviado y Ademas debe tener la opción de traer ambos o sea uno y dos Entonces:
Por lo tanto -1 yo sé que no existe tal registro lo que debería recuperar todos los documentos que tengan 1 y 2. El problema se produce cuando la primera expresión evalua a verdadera me recupera registro que tenga coincidencia con el numero 2, esto no debería pasar ya que está en el OR, pero insisto creo que el OR también se produce si la primera expresión es verdadera.
__________________
No todo es como parece ser... |
#4
|
||||
|
||||
Cita:
Cita:
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#5
|
||||
|
||||
Cita:
Cita:
Cita:
__________________
No todo es como parece ser... |
#6
|
||||
|
||||
Creo saber por que te sale asi.
(Soy un CHUTO explicando pero ahi vamos...) Segun mi interpretacion estas diciendo que traiga cada registro que cumpla "EG.COD_ESTADO_SEG = 1", si ese registro no cumpel con esa condicion pues con esta ==> SEG.COD_ESTADO_SEG between 1 and 2" Si evaluas registro por registro veras qeu va a traer tando 1 como 2.
__________________
Van Troi De León (Not) Guía, Code vB:=Delphi-SQL, ¿Cómo? Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto! |
#7
|
||||
|
||||
Cita:
Cita:
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#8
|
||||
|
||||
Cita:
Cita:
Si yo quito la segunda expresión, es decir el Or, me devuelva los registro que cumplen la condición 1, la idea es que si yo entrego un valor inexistente (lo hago de forma adrede a través de la aplicación) me devuelva registros que contenga 1 y 2
__________________
No todo es como parece ser... |
#9
|
||||
|
||||
en la sentencia:
de nada te sirve tener "Campo = 1" porque de igual manera se esta haciendo la misma comparación en el "between 1". Al poner : "between 1 and 2" es lo mismo que si pusieras: "campo = 1 or Campo=2" y al utilizar el operador Or, es como si solo estuvieras evaluando el between. Es decir, a mi parecer, la instrucción anterior, daría exactamente los mismo resultados que
Cualquier valor diferente de 1 ó 2, no se mostrará como resultado de la consulta.
__________________
|
#10
|
||||
|
||||
Cita:
Hasta Luego y gracias por su atención
__________________
No todo es como parece ser... |
#11
|
||||
|
||||
Cita:
Por un lado quieres obtener:
Pero cuando no se cumple esa relación quieres que la relación se establezca con los vigentes?... yo pondría un "OR NOT EXISTS (RELACIÓN) AND ESTADO = 'VIGENTE'"
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. Última edición por vtdeleon fecha: 21-07-2006 a las 02:59:31. |
#12
|
|||
|
|||
Estas mezclando dos conceptos diferentes, que se evalue o no la segunda comparacion es un tema de optimizacion del compilador o interprete que sea, una optimizacion permite simplemente que el codigo se ejecute un poco mas rapido, pero esto no tiene nada que ver con el resultado, es decir
el resultado de una comparacion o consulta va a ser el mismo independientemente de que se evaluen los dos resultados o no. Si hacemos "A o B", y al interpretar el resultado vemos que A es VERDADERO podriamos evaluar B o no, pero ya sabemos que el resultado final va a ser VERDADERO valga lo que valga B, de modo que muchos compiladores por tema de acelerar la ejecucion y no hacer comprobaciones superfluas, siemplemente ahi paran y ya no evaluan B porque no hace falta, ya sabemos que el resultado final es VERDADERO independientemente de lo que valga B. La explicacion en ingles de "Short-Circuit Evaluation", no tiene que ver con que los resultados en tu caso vayan a ser diferentes, has interpretado mal esa explicacion. Ese texto se limita a explicar un caso muy concreto que de rebote produce el hecho de no evaluar B, y es que si en B existe una operacion matematica que puede dar error (como una division por cero), en el caso de short-circuit evaluation si A ya es verdadero, la operacion B no daria error porque B no se evalua. No es que de resultados distintos es que se pararia el programa con un error o excepcion de division por cero en el caso de que se evaluase B. Pero este es un caso "extremo" por asi decirlo que no tiene que ver con la logica del operador OR, en definitiva un OR es un OR y siempre dara el mismo resultado independientemente de que el compilador o el interprete lo procesen de una forma u otra. Saludos |
#13
|
||||
|
||||
Yo enteindo que Si ejecutamos la consulta y no obtenemos por lo menos un registro qeu cumpla con la condicion "SEG.COD_ESTADO_SEG = 1", pues evalue "SEG.COD_ESTADO_SEG between 1 and 2 " (aunque no entiendo por que between 1 and 2 si 1 ha sido evaluado anteriormente)
Es asi lucarsart?
__________________
Van Troi De León (Not) Guía, Code vB:=Delphi-SQL, ¿Cómo? Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto! Última edición por vtdeleon fecha: 22-07-2006 a las 00:54:11. |
#14
|
||||
|
||||
He encontrado la solución
Hola Amigos:
Aquí logre sacar los resultados deseados:
I_OPCION = PARAMETRO Con esto mi reporte está funcionando a la perfección, gracias a todos los que intentaron orientarme Hasta luego -
__________________
No todo es como parece ser... |
#15
|
||||
|
||||
Cita:
Hasta Luego -
__________________
No todo es como parece ser... |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Operador LIKE en access | maurogambo | Tablas planas | 5 | 06-09-2006 14:20:42 |
Que pasa con el operador @? | Turboleta | Varios | 3 | 12-01-2006 20:50:35 |
Operador IS | Aztaroth | C++ Builder | 8 | 04-08-2004 14:44:27 |
Operador *= | febito | SQL | 1 | 09-06-2004 21:26:43 |
Operador @ | Tanix | PHP | 2 | 27-10-2003 10:07:14 |
|