On Wed, May 25, 2016 at 8:09 PM, Tom Lane <[email protected]> wrote:

> "David G. Johnston" <[email protected]> writes:
> > On Wed, May 25, 2016 at 7:42 PM, David G. Johnston <
> > [email protected]> wrote:
> >> ​What's the query with the revised parentheses?
>
> > ​Never mind...your right I doubt that it should matter.
>
> The parentheses in the original *definitely* matter, because by default
> AND binds more tightly than OR.  The larger number of rows in the second
> query are perfectly plausible given the parenthesis-omission.
>

​That's what I get for second-guessing myself...

To be more precise the behavior shown is exhibited in the following three
queries.

SELECT true OR false OR false AND false AND false  --> true
SELECT true OR false OR (false AND false AND false) -->true
or, more precisely:
SELECT (true OR false) OR ((false AND false) AND false) -->true

what is thus needed is:
SELECT (true OR false OR false) AND false AND false --> false
which is treated like
SELECT (((true OR false) OR false) AND false) AND false --> false

https://www.postgresql.org/docs/9.5/static/sql-syntax-lexical.html#SQL-PRECEDENCE-TABLE

penance served...

David J.
​

Reply via email to