ScyllaDB 是否支持 OR 运算符?

问题描述 投票:0回答:1

OR 条件如何在 scylladb 中的 SELECT 语句的 WHERE 子句中工作。

我在电子邮件上创建了二级索引。下面的查询工作正常并返回结果。

cqlsh> select * from test.d_emp where email='[email protected]';

 id  | dept | email       | first_name | last_name | salary
-----+------+-------------+------------+-----------+--------
  10 |   10 | [email protected] |        Rob |     Stark |   1000
   1 |   10 | [email protected] |        Rob |     Stark |   1000
 101 |   10 | [email protected] |        Rob |     Stark |   1000

(3 rows)

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

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

cqlsh>

cqlsh> select * from test.d_emp where email='[email protected]' or 1=1;
SyntaxException: line 1:51  : syntax error...

cqlsh>

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

cassandra nosql scylla
1个回答
1
投票

CQL(Cassandra 查询语言,也由 ScyllaDB 实现)没有通用的“OR”关键字(参见问题 #12910 - 仅支持“AND”)。错误消息本来可以而且应该更友好(请参阅问题#1703),但最终会告诉您正确的事情-这是语法错误-或者不是合法的 CQL 语法。

在您的用例中,

where email='[email protected]' or email='robs@ex'
,解决方案很简单 - 只需使用 IN 关键字:
where email IN ('[email protected]', 'robs@ex')
.

顺便说一句,

1=1
部分也不起作用,即使没有 OR,因为目前 CQL 表达式的范围相当有限,在这种情况下
column=value
是一个有效的表达式,但是
value=value
或其他东西, 不是。问题 #12906 是朝着改进这一点迈出的一步,但对于您的用例,您并不真正需要它(您并不是 真的 想在您的表达式中使用
1=1
)。

© www.soinside.com 2019 - 2024. All rights reserved.