cassandra scylladb where子句中的多个条件

nbnkbykc  于 2023-03-29  发布在  Cassandra
关注(0)|答案(1)|浏览(202)

在scylladb中,OR条件如何在WHERE子句中为SELECT语句工作。
我已经在电子邮件上创建了二级索引。下面的查询工作正常并返回结果。

cqlsh> select * from test.d_emp where email='robs@ex.com';

 id  | dept | email       | first_name | last_name | salary
-----+------+-------------+------------+-----------+--------
  10 |   10 | robs@ex.com |        Rob |     Stark |   1000
   1 |   10 | robs@ex.com |        Rob |     Stark |   1000
 101 |   10 | robs@ex.com |        Rob |     Stark |   1000

(3 rows)

然而,如果我使用两个条件,使用OR运算符,它会给出语法错误。即使是一个简单的1=1也会给出同样的错误。

cqlsh> select * from test.d_emp where email='robs@ex.com' or email='robs@ex';
SyntaxException: line 1:51  : syntax error...

cqlsh>

cqlsh> select * from test.d_emp where email='robs@ex.com' or 1=1;
SyntaxException: line 1:51  : syntax error...

cqlsh>

请帮助我理解如何在Scylladb中的where子句中合并多个条件。

czfnxgou

czfnxgou1#

CQL(Cassandra查询语言,也由ScyllaDB实现)没有通用的“OR”关键字(参见issue #12910- only“AND”)。错误消息本可以,也应该更友好(参见issue #1703),但最终告诉你正确的事情-这是语法错误- OR不是法律的的CQL语法。
在您的用例where email='robs@ex.com' or email='robs@ex'中,解决方案很简单-只需使用IN关键字:where email IN ('robs@ex.com', 'robs@ex') .
顺便说一下,1=1部分也不起作用,即使没有OR,因为目前CQL表达式的范围相当有限,在这种情况下,column=value是有效的表达式,但value=value或其他东西不是。问题#12906是改进的一步,但是对于你的用例,你并不真正需要它(你并不真的想在你的表达式中使用1=1)。

相关问题