Entrambi sarebbero validi, ma poiché AND
ha una precedenza maggiore di OR
, significherebbero cose diverse:
- La tua prima query tra parentesi selezionerebbe le righe eliminate con i tipi 3, 4, 5
- La tua seconda query tra parentesi selezionerebbe tutte le righe con i tipi 3, 5, oltre alle righe eliminate di tipo 4; questo è lo stesso significato della query originale senza parentesi.
Puoi evitare del tutto la confusione usando l'operatore IN
, in questo modo:
SELECT * FROM `table` WHERE type IN (3, 4, 5) AND table.deleted = 1;
o se volevi il secondo significato
SELECT * FROM `table` WHERE type IN (3, 5) OR (type = 4 AND table.deleted = 1)