Re: IN with arrays
От | Tom Lane |
---|---|
Тема | Re: IN with arrays |
Дата | |
Msg-id | 21275.1176737873@sss.pgh.pa.us обсуждение исходный текст |
Ответ на | IN with arrays (Peter Eisentraut <peter_e@gmx.net>) |
Список | pgsql-hackers |
Peter Eisentraut <peter_e@gmx.net> writes: > That is, why can't you write > SELECT 1 IN ( ARRAY[1, 2, 3] ); > when you can write > SELECT 1 = ANY ( ARRAY[1, 2, 3] ); > ? The two syntaxes are in fact *not* equivalent according to SQL92. = ANY derives from <quantified comparison predicate> ::= <row value constructor> <comp op> <quantifier> <table subquery> <quantifier> ::= <all> | <some> <all> ::= ALL <some> ::= SOME | ANY (notice the RHS *must* be a <table subquery>) whereas IN comes from <in predicate> ::= <row value constructor> [ NOT ] IN <in predicate value> <in predicate value> ::= <table subquery> | <left paren> <in value list> <right paren> <in value list> ::= <value expression> { <comma> <value expression> }... The form "expr = ANY (non-query-expr)" is therefore a spec extension, which we are free to define as we wish, and we defined it to be a scalar-vs-array-elements comparison. But I don't see any way that we can interpret "expr IN (other-expr)" as anything except a variant spelling for a simple equality test. regards, tom lane
В списке pgsql-hackers по дате отправления: