Ver Mensaje Individual
  #9 (permalink)  
Antiguo 20/09/2016, 15:18
Avatar de Libras
Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 4 meses
Puntos: 774
Respuesta: sentencia para select con comparador logico

Precedencia de operadores es lo que tiene de diferente ;), sql server analiza las sentencias de izquierda a derecha por lo que esto:


Código SQL:
Ver original
  1. SELECT * FROM `ZZZZZZZZZZ` WHERE `CODIGO` = '$q'  AND `estado` = 'PRESENTADO' OR `estado` = 'OBSERVADO'

nos va da dar como resultado todos los valores donde el codigo sea por ejemplo 1 y el estado sea presentado....hasta ahi todo bien, pero viene una sentencia OR, por lo que buscara todos los valores que tenga estado observado

si tenemos estos datos

codigo estado
1 presentado
1 presentado
2 observado
3 observado


Nos va a regresar todos los registros, porque porque se cumple que codigo sea 1 O estado sea observado :).

usando el mismo ejemplo pero usando el query que propongo:

Código SQL:
Ver original
  1. SELECT * FROM `ZZZZZZZZZZ` WHERE (`CODIGO` = '$q')  AND (`estado` = 'PRESENTADO' OR `estado` = 'OBSERVADO')

Aqui sql analizaria que tenga el codigo=1 y que el estado sea presentado u observado

con los datos de ejemplo nada mas nos regresara donde codigo=1 y estado presentado u observado en este caso nada mas los primeros 2 registros

1 presentado
1 presentado


Recuerda que una operacion logica cuando usas un and ambos resultados se deben de cumplir, en cambio cuando usas OR cualquiera de los 2 cumplan la condicion es mas que suficiente

Tabla de Verdad and:
1 and 1 =1
1 and 0 =0
0 and 1 = 0
0 and 0 =0

Tabla de verdad OR:
1 or 1 =1
1 or 0 =1
0 or 1 = 1
0 or 0 = 0


Se entiende?
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Última edición por Libras; 20/09/2016 a las 15:26