2011-11-15 17 views
17

estoy recibiendo algunos resultados extraños, así que tengo que sólo echa a mí mismo ...MySQL Query - No es igual a esto y esto

SELECT * 
FROM table 
WHERE complete != 0 
AND pending != 1 

Para que quede claro, éstos están permitidos:

pending = 0, complete = 0 
pending = 1, complete = 1 
pending = 0, complete = 1 

esto no está permitido para ser devueltos de mi consulta:

pending = 1, complete = 0 

¿Qué me estoy perdiendo aquí ...?

+0

¿Es sólo que necesito paréntesis alrededor '(completar = 0 y pendientes = 1!)'? – Shackrock

+0

No debería necesitar paréntesis. Esa consulta debería funcionar, tal vez debería publicar más detalles sobre la consulta real que está ejecutando (o la tabla). Si esa es la consulta, palabra por palabra, entonces ese es un comportamiento muy extraño. –

+0

Dudo que los parientes hagan la diferencia. ¿Puedes modificar tu pregunta con la estructura de la tabla? Mi primera suposición sería que, ya sea completo o pendiente, no eran tipos de datos int –

Respuesta

35

Probar:

SELECT * 
FROM table 
WHERE NOT (complete = 0 
AND pending = 1) 

o

SELECT * 
FROM table 
WHERE !(complete = 0 
AND pending = 1) 

EDIT: fui y miré: http://dev.mysql.com/doc/refman/4.1/en/expressions.html

+1

Esto. La cláusula original es * demasiado * restrictiva: solo permite 'completar = 1; pendiente = 0'. –

+0

@david esto es todo. gracias hombre. – Shackrock

+0

Debe marcarlo como respuesta aceptada –

9

Es necesario utilizar OR, no AND. Su expresión deja fuera cualquier combinación donde complete = 0 o pending = 1, que es demasiado restrictivo. Pruebe lo siguiente:

SELECT * 
FROM Table 
WHERE complete != 0 OR pending != 1; 
        ^^ change AND to OR 

muestra: http://sqlize.com/G8j6sFqo09