Re: <> ALL( ... ) and <> ANY ( ... ) didn't behave as expected - Mailing list pgsql-general

From Richard Huxton
Subject Re: <> ALL( ... ) and <> ANY ( ... ) didn't behave as expected
Date
Msg-id 470D171D.2020006@archonet.com
Whole thread Raw
In response to <> ALL( ... ) and <> ANY ( ... ) didn't behave as expected  (Richard Broersma Jr <rabroersma@yahoo.com>)
List pgsql-general
Richard Broersma Jr wrote:
> Here is the example that doesn't do what I expect:

I'm guessing you're just stood too close to the problem.

> --find all parents that have a mixture of boys and girls.
> --but this doesn't return anything
> SELECT *
>   FROM Parents AS P
>  WHERE 'girl' <> ALL ( SELECT gender
>                          FROM Children AS C1
>                         WHERE C1.parentid = P.parentid )
>    AND 'boy' <> ALL (  SELECT gender
>                          FROM Children AS C1
>                         WHERE C1.parentid = P.parentid );

This translates to
WHERE <none of the children are girls>
AND   <none of the children are boys>
Assuming you have a two-state gender then that's nothing.

For 'girl' <> ALL (...) then all the values you test must be not girls.

> --This query gets what I want
> --but I believe that it shouldn't return anything
>
> SELECT *
>   FROM Parents AS P
>  WHERE 'girl' <> ANY ( SELECT gender
>                          FROM Children AS C1
>                         WHERE C1.parentid = P.parentid )
>    AND 'boy' <> ANY (  SELECT gender
>                          FROM Children AS C1
>                         WHERE C1.parentid = P.parentid );

Translates to:
WHERE <any child is not a girl> AND <any child is not a boy>
So - at least one of each.

--
   Richard Huxton
   Archonet Ltd

pgsql-general by date:

Previous
From: "John D. Burger"
Date:
Subject: Re: <> ALL( ... ) and <> ANY ( ... ) didn't behave as expected
Next
From: Erik Jones
Date:
Subject: Re: <> ALL( ... ) and <> ANY ( ... ) didn't behave as expected