2017-03-17 11 views
0

次の3つのクエリを見てみましょう。 TRUEと評価される条件がwhere節にアタッチされたときに行を返さない方法を理解できません。最初のクエリは条件がTRUEと評価されるため、2番目のクエリでUser1を取得すると予想されます。TRUEに評価された式はWHERE句に影響しません。

cr> select full_name, labels, not 'autogenerated' = ANY(labels), not 'autogenerated' = ANY(labels) or labels = [] from testdb_master_core_users; 
+----------------+-------------------+-------------------------------------+--------------------------------------------------------+ 
| full_name  | labels   | (NOT 'autogenerated' = ANY(labels)) | ((NOT 'autogenerated' = ANY(labels)) OR (labels = [])) | 
+----------------+-------------------+-------------------------------------+--------------------------------------------------------+ 
| User2 Lastname | ["otherlabel"] | TRUE        | TRUE             | 
| User3 Lastname | ["autogenerated"] | FALSE        | FALSE             | 
| User1 Lastname | []    | TRUE        | TRUE             | 
+----------------+-------------------+-------------------------------------+--------------------------------------------------------+ 
SELECT 3 rows in set (0.003 sec) 
cr> select full_name, labels, not 'autogenerated' = ANY(labels) from testdb_master_core_users where not 'autogenerated' = ANY(labels); 
+----------------+----------------+-------------------------------------+ 
| full_name  | labels   | (NOT 'autogenerated' = ANY(labels)) | 
+----------------+----------------+-------------------------------------+ 
| User2 Lastname | ["otherlabel"] | TRUE        | 
+----------------+----------------+-------------------------------------+ 
SELECT 1 row in set (0.002 sec) 
cr> select full_name, labels, not 'autogenerated' = ANY(labels) from testdb_master_core_users where not 'autogenerated' = ANY(labels) or labels = []; 
+----------------+----------------+-------------------------------------+ 
| full_name  | labels   | (NOT 'autogenerated' = ANY(labels)) | 
+----------------+----------------+-------------------------------------+ 
| User2 Lastname | ["otherlabel"] | TRUE        | 
| User1 Lastname | []    | TRUE        | 
+----------------+----------------+-------------------------------------+ 
SELECT 2 rows in set (0.002 sec) 
+0

これに関連するチケットをGitHubに追加しました:https://github.com/crate/crate/issues/5132 –

答えて

0

期待通りです.2番目のクエリでUser1も返されます。

この現象は、selectの式がwhere句の式と異なる評価を受けているために発生します。下位のluceneインデックスを利用する後者は、NOTを間違って変換して、空のリストが見つからないようにしているようです。

この問題は、今後のリリース1.0.6および1.1.1で修正される予定です。

+0

これは質問への回答を提供しません。あなたが十分な評判を得たら、あなたはどんな投稿にでもコメントすることができます。 の代わりに、質問者からの説明を必要としない回答を提供してください。 –

関連する問題