2016-07-15 7 views
0

ここで私はPostgresの文字列配列の比較で、比較演算子の後に配列を与えなければならないことに気付きました。例については :なぜ比較演算子の後でPostgres配列が比較されるのですか?

SELECT campaign_products 
FROM contacts 
WHERE 'PMP' LIKE ANY(campaign_products) limit 10; 

SELECT campaign_products 
FROM contacts 
WHERE 'as' = ANY(campaign_products); 

しかし、私は構文エラー与えて、それ以下のように使用する場合:

SELECT campaign_products 
from contacts 
where ANY(campaign_products) = 'as'; 

ERROR: syntax error at or near "ANY" 
LINE 1: SELECT campaign_products from contacts where ANY(campaign_pr... 

をいくつかのいずれかが私にこれを説明すると、左からの配列を与えるためにどのような方法があるなら、私に知らせることができます比較演算子。

答えて

1

これはSQL標準です。 ISO/IEC 9075から2(2003)では

次のように、財団は、定義されています

8.8 <quantified comparison predicate>

Format

<quantified comparison predicate> ::= 
    <row value predicand> <quantified comparison predicate part 2> 

<quantified comparison predicate part 2> ::= 
    <comp op> <quantifier> <table subquery> 

<quantifier> ::= 
    <all> 
    | <some> 

<all> ::= ALL 

<some> ::= 
    SOME 
    | ANY 

だから、それはあなたがSQL標準に取る必要があるだろう質問です。

真剣に、なぜあなたはANY =が必要ですか?比較が構文的に正しいように側を切り替えるのは問題ではありません。

左辺が値、右辺が値の集まりである場合、= ANYまたは= SOMEを演算子と考えてください。 PostgreSQLは、SQL標準の構文を拡張しています。

+0

私はちょうど何が起こっているのかを知りたいだけです。違いは文字列の比較と文字列の比較です。たとえば、次のような連絡先からIDを選択します。status = 'lead' limit 1; 'lead' = ANY(状況)制限1の連絡先からIDを選択します。私に結果を与えていますが、ANY(ステータス)= 'リード'リミット1の連絡先からIDを選択してください。 エラー: "ANY"またはそれに近い文法エラー 行1:ANY(ステータス)= 'リード'制限1 ... – Pandu

+0

という構文の間違いです。私は答えを編集した、おそらくそれはより明確になります。 ''は構文図の中で ''の直前になければなりません。 'ANY'は'

'に属しません。 –

関連する問題