2011-11-15 9 views
17

sto ottenendo alcuni risultati strani, quindi ho bisogno di controllare solo me stesso ...MySQL Query - non uguale a questo e questo

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

Per essere chiari, questi è autorizzato:

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

questo non è consentito per essere tornato dalla mia interrogazione:

pending = 1, complete = 0 

Cosa mi manca qui ...?

+0

è solo che ho bisogno di parentesi attorno '(completare = 0 e in attesa = 1!!)'? – Shackrock

+0

Non dovresti avere bisogno di parentesi. Quella query dovrebbe funzionare, forse dovresti pubblicare più dettagli sulla query reale che stai eseguendo (o sulla tabella). Se questa è la query, parola per parola, allora questo è un comportamento molto strano. –

+0

Dubito che Parens farebbe la differenza. Puoi modificare la tua domanda con la struttura della tabella? La mia prima ipotesi sarebbe che sia completo o in sospeso non erano i tipi di dati int –

risposta

35

Prova:

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

o

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

EDIT: andai e guardai: http://dev.mysql.com/doc/refman/4.1/en/expressions.html

+1

Questo. La clausola originale è * too * restrictive: consente solo 'complete = 1; in sospeso = 0'. –

+0

@david è proprio questo. grazie uomo. – Shackrock

+0

Dovresti contrassegnarlo come risposta accettata –

9

È necessario utilizzare OR, non AND. La tua espressione omette qualsiasi combinazione in cui complete = 0 o pending = 1, che è troppo restrittivo. Provare quanto segue:

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

Esempio: http://sqlize.com/G8j6sFqo09