Ver Mensaje Individual
  #9 (permalink)  
Antiguo 02/11/2012, 06:44
quimfv
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 2 meses
Puntos: 574
Respuesta: Buscar una variable en varios campos

Debes dar un repaso a la logica

A o B y C dará registros donde se cumpla A (solo A) y registros donde se cumplan B y C (los dos), igual que A o (B y C)

(A o B) y C dará registros donde se cumplan A o B (uno o los dos) y que tambien cumplan C
No dará aquellos registros que no cumplan ni A ni B pase lo que pase con C.
Tampoco dará aquellos que cumpliendo A o B no cumplan C

A partir de esto debes analizar lo que estas buscando que cumpla tu selección.

Es lo mismo que pasa en matematicas

2 + 3 * 5 = 17
2 + (3 * 5) = 17
(2 + 3) * 5 = 25

En cuanto a IN

campo1=10 OR campo1=12 OR campo1=14

es lo mismo que

campo1 IN (10,12,14)

http://dev.mysql.com/doc/refman/5.0/...ubqueries.html

El uso que propones

valor IN (...lista de campos...)

no se deriva de lo que dice el manual


Cita:
expr IN (value,...)

Retorna 1 si expr es uno de los valores en la lista IN , de lo contrario retorna 0. Si todos los valores son constantes, se evalúan según el tipo y ordenación de expr . La búsqueda para el elemento se hace usando búsqueda binaria. Esto significa que IN es muy rápido si la lista IN consiste enteramente en constantes. Si expr es una expresión de cadenas de caracteres sensible a mayúsculas, la comparación de cadenas se realiza sensible a mayúsculas.

mysql> SELECT 2 IN (0,3,5,'wefwf');
-> 0
mysql> SELECT 'wefwf' IN (0,3,5,'wefwf');
-> 1

El número de valores en la lista IN sólo está limitado por el valor max_allowed_packet.

En MySQL 5.0, para cumplir el estándar SQL IN retorna NULL no sólo si la expresión de la parte izquierda es NULL, también si no encuentra coincidencias en la lista y una de las expresiones en la lista es NULL.

La sintaxis de IN() puede usarse para escribir algunas subconsultas. Consulte Sección 13.2.8.3, “Subconsultas con ANY, IN y SOME”.

expr NOT IN (value,...)

Esto es lo mismo que NOT (expr IN (value,...)).
Pero si funciona ciertamente parece una sintaxis mas clara para este caso....

Pero fijate bien en lo que dice

...IN retorna NULL ... si ...una de las expresiones en la lista es NULL...

Es decir va a fallar la busqueda si un campo de la lista es nulo. Eso a mi entender invalida el uso de esta sintaxis excepto claro que todos los campos de la lista sean NOT NULL por defecto.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 02/11/2012 a las 07:00