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 子句中组合多个条件。
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
)。