Re: BUG #13289: ANY() function produces a paradox
От | David G. Johnston |
---|---|
Тема | Re: BUG #13289: ANY() function produces a paradox |
Дата | |
Msg-id | CAKFQuwbGesuhR-zKJtj0ddNxooSY-gDM-L5o-VNX0+gcGCGi-g@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: BUG #13289: ANY() function produces a paradox (Alvaro Herrera <alvherre@2ndquadrant.com>) |
Список | pgsql-bugs |
On Thu, May 14, 2015 at 10:01 PM, Alvaro Herrera <alvherre@2ndquadrant.com> wrote: > udtelco@gmail.com wrote: > > The following bug has been logged on the website: > > > > Bug reference: 13289 > > Logged by: Anton > > Email address: udtelco@gmail.com > > PostgreSQL version: 9.3.2 > > Operating system: Solaris 11.2 > > Description: > > > > select ('2' !=3D any('{2,3}')) , ('2' =3D any('{2,3}')) > > > > When !=3D (or <>) operator is applied to any() , results are wrong. > Thereby, > > you have a situation where x =3D y AND x !=3D y both evaluating as true= . > > There is no paradox here. When you specify "op ANY array", the operator = is > applied to each element in the array and the whole construct returns > true if the operator yields true with any of the array elements. 2 !=3D = 3 > therefore 2 !=3D any ('{2,3}') is true. > > Maybe you want !=3D ALL instead of !=3D ANY. With !=3D ALL, the element = would > be compared to every element and the whole construct would yield true > only if all the operations yield true. > Using de Morgan:: http://en.wikipedia.org/wiki/De_Morgan%27s_laws (A OR B) =3D> NOT (A OR B) =3D (NOT A AND NOT B)=E2=80=8B (=E2=80=8Bx =3D ANY) =3D> NOT(x =3D ANY) =3D (X !=3D ALL)=E2=80=8B ANY =3D OR; ALL =3D AND David J.
В списке pgsql-bugs по дате отправления: